如果大家看过我的随笔文章《
查询控件、分页控件、页面展示控件,我的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是测试例子的数据库脚本,允许例子前,请初始化数据库。

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

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

标签: none

添加新评论