原创企业级控件库之组合查询控件.docx
- 文档编号:27206708
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:16
- 大小:49.26KB
原创企业级控件库之组合查询控件.docx
《原创企业级控件库之组合查询控件.docx》由会员分享,可在线阅读,更多相关《原创企业级控件库之组合查询控件.docx(16页珍藏版)》请在冰豆网上搜索。
原创企业级控件库之组合查询控件
原创企业级控件库之组合查询控件
发布日期:
2010年12月10日星期五作者:
EricHu
无论对于企业还是对于软件开发者来说,拥有自己的一套常用控件库,对于开发产品来说不仅可以缩短开发时间,提高开发效率,同时对一个企业整个产品的形象也会大大提高。
本系列控件为作者在实际开发应用中总结出来,且成功应用于多个项目。
现对整个控件库一一讲解,最后我会把整个控件库开源,方便你的使用,同时会给一个综合应用这些控件的实例。
成就别人、等于成就自己。
我没什么要求,欢迎大家多多支持与评论,觉得不错的,记得点击文章左下角的”关注博客”,就这么简单。
整个控件样式如下:
说明:
1、本控件分为组合查询与固定查询两种,上图为组合查询。
固定查询见下图。
2、组合查询以下几部份组成:
a.查询项:
设置查询的项目,通俗点就是表中的字段。
b.运算符:
设置查询条件,如:
等于、大小、包含、为空等。
c.值:
设置查询的值。
d.组合方式:
当查询条件大于两个时,其组合条件可设为:
与方式、或方式、非方式三种。
e.新增:
新增查询条件到组合条件框。
f.清除:
当输入错误时,可以清除组合条件框中的组合查询条件。
g.查询:
当用户单击查询时,返回查询表达式,供用户使用。
h.固定查询:
当用户单击固定查询时,控件变成固定查询控件,同时,固定查询变成“组合查询”,如下图:
3、本控件特点:
a.对用户输入的危险字符进行了屏蔽,可有效防止对数据库的破坏。
b.控件返回的查询条件都是合法的Sql语句中的Where条件表达式,可以直接使用。
c.开放源代码,用户可以根据自己的需要进行定制,消除你的后顾之优。
4、本控件类图如下所示:
5、本控件核心代码
a.得到组合查询表达式
#region组合查询表达式
///
///单击[查询]按钮时发生
///
[Category("组合查询"),Description("单击[查询]按钮时发生。
"),Browsable(true)]
publiceventEventHandlerOnQueryClicked;
privatestring_queryExpression;
///
///最终的查询表达式,可直接用于Where子句中
///
[Category("组合查询"),Description("最终的查询表达式,可直接用于Where子句中。
"),Browsable(false)]
publicstringQueryExpression
{
get{return_queryExpression;}
set
{
_queryExpression=value;
if(OnQueryClicked!
=null)
{
OnQueryClicked(this,null);
}
}
}
#endregion
b.设置查询项中要显示的数据列表
#region设置查询项中要显示的数据列表
///
///设置查询项中要显示的数据列表(推荐使用这个方法)
///
///
数据字段,值:
数据字段对应的数据类型)
publicvoidSetQueryItems(Dictionary
{
cboQueryItems.Items.Clear();
dicQueryItem=null;
dicQueryItem=dicListQueryItems;
foreach(KeyValuePair
{
cboQueryItems.Items.Add(kvp.Key);
}
if(cboQueryItems.Items.Contains("案卷号"))//把案卷号显示在第一个
{
cboQueryItems.Items.Remove("案卷号");
cboQueryItems.Items.Insert(0,"案卷号");
}
cboQueryItems.SelectedIndex=0;
}
///
///设置查询项中要显示的数据列表
///
///
publicvoidSetQueryItems(string[]sQueryItems)
{
cboQueryItems.Items.Clear();
foreach(stringqueryIteminsQueryItems)
{
cboQueryItems.Items.Add(queryItem);
}
cboQueryItems.SelectedIndex=0;
}
///
///设置查询项中要显示的数据列表
///
///
publicvoidSetQueryItems(List
{
cboQueryItems.Items.Clear();
foreach(stringqueryIteminlistQueryItems)
{
cboQueryItems.Items.Add(queryItem);
}
cboQueryItems.SelectedIndex=0;
}
#endregion
C.增加查询条件
#region增加查询条件单击事件btnAddQueryCondition_Click(objectsender,EventArgse)
privatevoidbtnAddQueryCondition_Click(objectsender,EventArgse)
{
if(cboQueryItems.Items.Count==0)
{
DialogHelper.ShowErrorMsg("查询项为空,不能进行查询!
");
return;
}
else
{
stringsQueryItem=cboQueryItems.Text.Trim();//要查询的项
stringsQueryValue=txtQueryValue.Text.Trim();//查询项的值
stringsCombinMode=string.Empty;//组合方式
stringsQueryExpress=string.Empty;//查询条件表达式
if(cboOperator.Text!
="为空"&&cboOperator.Text!
="不为空")
{
if(string.IsNullOrEmpty(txtQueryValue.Text.Trim()))
{
DialogHelper.ShowWarningMsg("必须输入查询项的值!
");
txtQueryValue.Focus();
return;
}
else
{
if(StringHelper.HasDangerousWord(txtQueryValue.Text.Trim()))
{
DialogHelper.ShowWarningMsg("对不起,你的输入含有危险字符,请重新输入!
");
txtQueryValue.Clear();
txtQueryValue.Focus();
return;
}
}
}
switch(cboCombinMode.Text)
{
case"与方式":
sCombinMode="AND";
break;
case"或方式":
sCombinMode="OR";
break;
case"非方式":
sCombinMode="ANDNOT";
break;
default:
break;
}
#region条件设置
switch(cboOperator.Text)
{
case"包含":
sQueryExpress=sQueryItem+"LIKE'%"+sQueryValue+"%'";
break;
case"左包含":
sQueryExpress=sQueryItem+"LIKE'"+sQueryValue+"%'";
break;
case"右包含":
sQueryExpress=sQueryItem+"LIKE'%"+sQueryValue+"'";
break;
case"为空":
sQueryExpress=sQueryItem+"ISNULLOR"+sQueryItem+"=''";
break;
case"不为空":
sQueryExpress=sQueryItem+"ISNOTNULLAnd"+sQueryItem+"!
=''";
break;
case"大于":
if(dicQueryItem.Count==0)
{
sQueryExpress=sQueryItem+">"+sQueryValue;
}
else
{
foreach(KeyValuePair
{
if(cboQueryItems.Text==kvp.Key)
{
if((kvp.Value=="System.DateTime"||kvp.Value=="System.String")
&&kvp.Key!
="案卷号")//kvp.Key!
="案卷号"主是要因为案卷号是字符型,案卷号>'90',得不到正确结果,所以在此这样做
{
sQueryExpress=sQueryItem+">'"+sQueryValue+"'";
}
else
{
sQueryExpress=sQueryItem+">"+sQueryValue;
}
}
}
}
break;
case"大于或等于":
if(dicQueryItem.Count==0)
{
sQueryExpress=sQueryItem+">="+sQueryValue;
}
else
{
foreach(KeyValuePair
{
if(cboQueryItems.Text==kvp.Key)
{
if((kvp.Value=="System.DateTime"||kvp.Value=="System.String")&&kvp.Key!
="案卷号")
{
sQueryExpress=sQueryItem+">='"+sQueryValue+"'";
}
else
{
sQueryExpress=sQueryItem+">="+sQueryValue;
}
}
}
}
break;
case"等于":
if(dicQueryItem.Count==0)
{
sQueryExpress=sQueryItem+"="+sQueryValue;
}
else
{
foreach(KeyValuePair
{
if(cboQueryItems.Text==kvp.Key)
{
//---3
if(kvp.Value=="System.DateTime"||kvp.Value=="System.String")
{
sQueryExpress=sQueryItem+"='"+sQueryValue+"'";
}
else
{
sQueryExpress=sQueryItem+"="+sQueryValue;
}
}
}
}
break;
case"小于或等于":
if(dicQueryItem.Count==0)
{
sQueryExpress=sQueryItem+"<="+sQueryValue;
}
else
{
foreach(KeyValuePair
{
if(cboQueryItems.Text==kvp.Key)
{
if((kvp.Value=="System.DateTime"||kvp.Value=="System.String")&&kvp.Key!
="案卷号")
{
sQueryExpress=sQueryItem+"<='"+sQueryValue+"'";
}
else
{
sQueryExpress=sQueryItem+"<="+sQueryValue;
}
}
}
}
break;
case"小于":
if(dicQueryItem.Count==0)
{
sQueryExpress=sQueryItem+"<"+sQueryValue;
}
else
{
foreach(KeyValuePair
{
if(cboQueryItems.Text==kvp.Key)
{
if((kvp.Value=="System.DateTime"||kvp.Value=="System.String")&&kvp.Key!
="案卷号")
{
sQueryExpress=sQueryItem+"<'"+sQueryValue+"'";
}
else
{
sQueryExpress=sQueryItem+"<"+sQueryValue;
}
}
}
}
break;
default:
break;
}
if(!
string.IsNullOrEmpty(txtQueryCondition.Text.Trim()))
{
sQueryExpress=sCombinMode+""+sQueryExpress;
}
txtQueryCondition.AppendText(""+sQueryExpress);
#endregion
}
}
#endregion
6、控件编译后,你可把编译后的dll文件直接拖运到MicrosoftVisualStudi工具箱中,就可以看到我们的组合查询控件了。
在实际应用中,仅需以下两个步骤即可完成整个代码。
a.在窗体社会分配加载时绑定相应的查询项
///
///增加测试数据
///
privatevoidBindTestData()
{
dtTest=newDataTable();
dtTest.Columns.Add(newDataColumn("身份证号",typeof(System.String)));
dtTest.Columns.Add(newDataColumn("姓名",typeof(System.String)));
dtTest.Columns.Add(newDataColumn("QQ",typeof(System.String)));
dtTest.Columns.Add(newDataColumn("年龄",typeof(System.Int16)));
dtTest.Columns.Add(newDataColumn("出生时间",typeof(System.DateTime)));
}
privatevoidFrmUcCombinQueryTest_Shown(objectsender,EventArgse)
{
BindTestData();
//绑定查询项
Dictionary
foreach(DataColumndcindtTest.Columns)
{
dicListQueryItems.Add(dc.ColumnName,dc.DataType.ToString());
}
ucCombinQueryTest.SetQueryItems(dicListQueryItems);
}
b.单击查询时,返回给用户的查询表达式,用户直接得到使用,在组合查询的OnQueryClicked事件代码中进行处理。
privatevoiducCombinQueryTest_OnQueryClicked(objectsender,EventArgse)
{
//得到查询表达式
MessageBox.Show(ucCombinQueryTest.QueryExpression);
}privatevoiducCombinQueryTest_OnQueryClicked(objectsender,EventArgse)
{
if(!
ucCombinQueryDjjnml.QueryExpression.Equals("1=1"))
{
stringsQueryWhere=ucCombinQueryDjjnml.QueryExpression;
//其它处理代码..........
}
}
7、下面给出组合查询控件完整代码
©2010EricHu
原创作品,转贴请注明作者和出处,留此信息。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 原创 企业级 控件 组合 查询
![提示](https://static.bdocx.com/images/bang_tan.gif)