发布两个Winform新控件:Winfrom下的查询控件和内容展示控件

如果大家看过我的随笔文章《 查询控件、分页控件、页面展示控件,我的Web开发三大得力助手》相信大家都对Web中的查询控件、页面展示控件有很多感触,现在我这两个发布两个Winform版本的相似控件: Winfrom下的查询控件和内容展示控件。

首先我们回顾一下Web的查询控件和内容展示控件先。

WEB查询控件
1. 根据设定的字段属性在界面呈现相应的说明及控件
2. 支持下拉列表之间的联动,支持输入数据的验证操作。
3. 支持查询历史记录记忆功能
4. 支持日期控件的集成
5. 支持移动省公司界面样式集成

WEB页面展示控件

1. 支持查看、增加、编辑三种类型的页面展现
2. 根据设定的字段属性在界面呈现相应的说明及控件
3. 支持布局和样式修改
4. 支持日期控件的集成
5. 支持移动省公司界面样式集成

下面我来介绍下Winform下的两个控件。

Winfrom下的查询控件和内容展示控件和Web的属性和基本框架是一样的,都是根据字段信息,自动构筑UI,并提供对数据的验证,下拉列表联动等,以便减少界面代码和界面布局导致的工作量增加。

做这两个控件的主要目的是减少代码,并利于代码生成工具Database2Sharp自动生成UI内容(WEB和Winform界面),相当于把界面呈现的逻辑进行了封装。





虽然和Web界面的控件使用方法差不多,我们还是来展示下相关的代码把,这样有助于了解控件的使用方面。

查询控件窗体的部分代码:

         private   void  InitSearch()
        {
            SearchControl1.Dock 
=  DockStyle.Fill;
            
// SearchControl1.PanelBorderStyle = TableLayoutPanelCellBorderStyle.Single;
             this .groupBox1.Controls.Add(SearchControl1);

            
this .SearchControl1.OutSQLValueChanged  +=   new  OutSQLChangedHandle(SearchControl1_OutSQLValueChanged);
            
this .SearchControl1.OnAddNew  +=   new  AddNewHandler(SearchControl1_OnAddNew);
            
this .SearchControl1.OnDelete  +=   new  DeleteHandler(SearchControl1_OnDelete);

            Button appendButton 
=  CreateButton( " btnAppended " " 其他 " );
            
this .SearchControl1.AppendedButtons  =   new  Button[] { appendButton };

            FieldInfo nameInfo 
=   new  FieldInfo( " Name " " 姓名 " , FieldType.String);

            FieldInfo cityInfo 
=   new  FieldInfo( " City " " 城市 " , FieldType.String);
            cityInfo.Width 
=   100 ;
            cityInfo.Items 
=   new  CListItem[] {  new  CListItem( " 北京市 " " 北京 " ),  new  CListItem( " 广州 " ),  new  CListItem( " 成都 " ) };
            cityInfo.TargetFieldName 
=   " Area " ;
            cityInfo.OnFillItem 
+=   new  AddItemHandler( this .OnFillItem);

            FieldInfo areaInfo 
=   new  FieldInfo( " Area " " 地区 " , FieldType.String);
            areaInfo.Items 
=   new  CListItem[ 0 ];

            FieldInfo manInfo 
=   new  FieldInfo( " Man " " 是否男性 " , FieldType.Boolean);
            FieldInfo birthInfo 
=   new  FieldInfo( " Birthday " " 出生日期 " , FieldType.DateTime);
            FieldInfo ageInfo 
=   new  FieldInfo( " Age " " 年龄 " , FieldType.Numeric);

            
this .SearchControl1.SearchFields  =   new  FieldInfo[] { nameInfo, cityInfo, areaInfo, manInfo, birthInfo, ageInfo };
            
this .SearchControl1.RowControls  =   3 ;
            
this .SearchControl1.ShowAddNew  =   true ;
            
this .SearchControl1.LabelHorizontalAlign  =  System.Windows.Forms.VisualStyles.HorizontalAlign.Right;
            
this .SearchControl1.InSQL  =   " Select * from Test " ;

            BindData();
        }

        
private   void  BindData()
        {
            
using  (SqlConnection conn  =   new  SqlConnection(CONNECTION_STRING))
            {
                conn.Open();

                
string  sql  =   this .SearchControl1.OutSQL;
                SqlCommand command 
=   new  SqlCommand(sql, conn);
                
foreach  ( string  key  in   this .SearchControl1.PagerParameters.Keys)
                {
                    command.Parameters.Add(
new  SqlParameter(key,  this .SearchControl1.PagerParameters[key]));
                }

                SqlDataAdapter adapter 
=   new  SqlDataAdapter(command);
                DataSet ds 
=   new  DataSet();
                adapter.Fill(ds, 
" test " );

                
this .dataGridView1.DataSource  =  ds.Tables[ 0 ];
            }

 


页面展示控件的窗体部分代码:

         private   void  InitEditControl()
        {
            editControl.Dock 
=  DockStyle.Fill;

            
// editControl.ControlType = ControlType.Edit;
            
// TestInfo info = new TestInfo();
            
// info.Name = "wuhuacong";
            
// editControl.EntityObject = info;

            FieldInfo nameInfo 
=   new  FieldInfo( " Name " " 姓名 " , FieldType.String);
            nameInfo.IsRequired 
=   true ;
            nameInfo.ToolTip 
=   " 请输入用户名称 " ;
            nameInfo.ColumnSpan 
=   2 ;
            nameInfo.Width 
=   400 ;
            
// nameInfo.MaxLength = 255;
            
// nameInfo.TextColumns = 100;
            
// nameInfo.TextRows = 2;
            
// nameInfo.Enabled = false;
            nameInfo.IsMultiLine  =   true ;
            
// if (editControl.ControlType != ControlType.Add)
            
// {
            
//     nameInfo.Enabled = false;  // 设置“名称”不可编辑
            
// }

            FieldInfo cityInfo 
=   new  FieldInfo( " City " " 城市 " , FieldType.String);
            cityInfo.Items 
=   new  CListItem[] {  new  CListItem( " 北京市 " " 北京 " ),  new  CListItem( " 广州 " ),  new  CListItem( " 成都 " ),  new  CListItem( " 武汉 " ) };
            cityInfo.TargetFieldName 
=   " Area " ;
            cityInfo.OnFillItem 
=   new  AddItemHandler( this .AddItem);
            cityInfo.ColumnSpan 
=   2 ;

            FieldInfo areaInfo 
=   new  FieldInfo( " Area " " 地区 " , FieldType.String);
            areaInfo.Items 
=   new  CListItem[ 0 ];

            FieldInfo manInfo 
=   new  FieldInfo( " Man " " 是否男性 " , FieldType.Boolean);
            manInfo.Items 
=   new  CListItem[] {  new  CListItem( " 男性 " " True " ),  new  CListItem( " 女性 " " False " ) };
            manInfo.DefaultValue 
=   " False " ;

            FieldInfo birthInfo 
=   new  FieldInfo( " Birthday " " 出生日期 " , FieldType.DateTime);
            birthInfo.IsRequired 
=   true ;
            birthInfo.DefaultValue 
=   " 2009-1-1 " ;
            birthInfo.CustomFormat 
=   " yyyy-MM-dd " ;

            FieldInfo ageInfo 
=   new  FieldInfo( " Age " " 年龄 " , FieldType.Numeric);
            
// ageInfo.CustomFormat = "#.##";

            FieldInfo favoriteInfo 
=   new  FieldInfo( " Favorites " " 兴趣爱好 " , FieldType.String);
            favoriteInfo.Items 
=   new  CListItem[] {  new  CListItem( " 篮球 " ),  new  CListItem( " 足球 " ),  new  CListItem( " 网球 " ), 
                
new  CListItem( " 乒乓球 " ),  new  CListItem( " 台球 " , " t " ),  new  CListItem( " 羽毛球 " " y " ) };
            favoriteInfo.ItemsType 
=  ListControlType.CheckBoxList;
            favoriteInfo.ColumnSpan 
=   2 ;
            favoriteInfo.Width 
=   300 ;
            
// favoriteInfo.DefaultValue = "篮球,乒乓球,t,y";

            editControl.EidtFields 
=   new  FieldInfo[] { nameInfo, cityInfo, areaInfo, manInfo, birthInfo, ageInfo, favoriteInfo };
            editControl.RowControls 
=   2 // 默认一行放置2个控件组
            
// editControl.ContentControlWidth = 200; // 所有控件统一宽度
            editControl.LabelHorizontalAlign  =  HorizontalAlign.Right; // 标签文本对其方式
            editControl.PanelBorderStyle  =  TableLayoutPanelCellBorderStyle.None; // 表格样式

            editControl.OnCancel 
=   new  CancelHandler( this .OnCancel);
            editControl.OnSaveData 
=   new  SaveDataHandler( this .OnSaveData);
            
this .groupBox1.Controls.Add(editControl);
        }

        
private   void  Form1_Load( object  sender, EventArgs e)
        {
            InitEditControl();
        }

 


下面附上使用的例子,可以下载下来慢慢研究,其中Database.sql是测试例子的数据库脚本,允许例子前,请初始化数据库。

http://files.cnblogs.com/wuhuacong/TestWinControl.rar 

希望大家使用愉快,下一步我将集成UI的自动生成到Database2Sharp中,和Web一样,利用查询控件和分页控件、页面展示控件完成UI的生成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值