WEB查询控件
1. 根据设定的字段属性在界面呈现相应的说明及控件
2. 支持下拉列表之间的联动,支持输入数据的验证操作。
3. 支持查询历史记录记忆功能
4. 支持日期控件的集成
5. 支持移动省公司界面样式集成
WEB页面展示控件
1. 支持查看、增加、编辑三种类型的页面展现
2. 根据设定的字段属性在界面呈现相应的说明及控件
3. 支持布局和样式修改
4. 支持日期控件的集成
5. 支持移动省公司界面样式集成
下面我来介绍下Winform下的两个控件。
Winfrom下的查询控件和内容展示控件和Web的属性和基本框架是一样的,都是根据字段信息,自动构筑UI,并提供对数据的验证,下拉列表联动等,以便减少界面代码和界面布局导致的工作量增加。
做这两个控件的主要目的是减少代码,并利于代码生成工具Database2Sharp自动生成UI内容(WEB和Winform界面),相当于把界面呈现的逻辑进行了封装。
虽然和Web界面的控件使用方法差不多,我们还是来展示下相关的代码把,这样有助于了解控件的使用方面。
查询控件窗体的部分代码:
{
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 ];
}
页面展示控件的窗体部分代码:
{
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的生成。