`

原创企业级控件库之组合查询控件

 
阅读更多

原创企业级控件库之组合查询控件

发布日期:2010年12月10日星期五 作者:EricHu

  无论对于企业还是对于软件开发者来说,拥有自己的一套常用控件库,对于开发产品来说不仅可以缩短开发时间,提高开发效率,同时对一个企业整个产品的形象也会大大提高。本系列控件为作者在实际开发应用中总结出来,且成功应用于多个项目。现对整个控件库一一讲解,最后我会把整个控件库开源,方便你的使用,同时会给一个综合应用这些控件的实例。

  成就别人、等于成就自己。我没什么要求,欢迎大家多多支持与评论,觉得不错的,记得点击文章左下角的”关注博客”,就这么简单。

  整个控件样式如下:

  说明:

  1、本控件分为组合查询与固定查询两种,上图为组合查询。固定查询见下图。

  2、组合查询以下几部份组成:

a. 查询项:设置查询的项目,通俗点就是表中的字段。

b. 运算符:设置查询条件,如:等于、大小、包含、为空等。

c. 值:设置查询的值。

d. 组合方式:当查询条件大于两个时,其组合条件可设为:与方式、或方式、非方式三种。

e. 新增:新增查询条件到组合条件框。

f. 清除:当输入错误时,可以清除组合条件框中的组合查询条件。

g. 查询:当用户单击查询时,返回查询表达式,供用户使用。

h. 固定查询:当用户单击固定查询时,控件变成固定查询控件,同时,固定查询变成“组合查询”,如下图:  

  3、本控件特点:

a. 对用户输入的危险字符进行了屏蔽,可有效防止对数据库的破坏。

b. 控件返回的查询条件都是合法的Sql语句中的Where条件表达式,可以直接使用。

c. 开放源代码,用户可以根据自己的需要进行定制,消除你的后顾之优。

  4、本控件类图如下所示:

5、本控件核心代码

a. 得到组合查询表达式

代码
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> #region 组合查询表达式
/// <summary>
/// 单击[查询]按钮时发生
/// </summary>
[Category("组合查询"), Description("单击[查询]按钮时发生。"), Browsable(true)]
public event EventHandler OnQueryClicked;

private string _queryExpression;
/// <summary>
/// 最终的查询表达式,可直接用于Where子句中
/// </summary>
[Category("组合查询"), Description("最终的查询表达式,可直接用于Where子句中。"), Browsable(false)]
public string QueryExpression
{
get { return _queryExpression; }
set
{
_queryExpression
= value;
if (OnQueryClicked != null)
{
OnQueryClicked(
this, null);
}
}
}
#endregion

b. 设置查询项中要显示的数据列表

代码
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> #region 查询项相关控制

#region 设置查询项中要显示的数据列表
/// <summary>
/// 设置查询项中要显示的数据列表(推荐使用这个方法)
/// </summary>
/// <param name="dicListQueryItems">表示键和值的集合(键:数据字段,值:数据字段对应的数据类型)</param>
public void SetQueryItems(Dictionary<string, string> dicListQueryItems)
{
cboQueryItems.Items.Clear();
dicQueryItem
= null;
dicQueryItem
= dicListQueryItems;
foreach (KeyValuePair<string, string> kvp in dicListQueryItems)
{
cboQueryItems.Items.Add(kvp.Key);
}

if (cboQueryItems.Items.Contains("案卷号"))//把案卷号显示在第一个
{
cboQueryItems.Items.Remove(
"案卷号");
cboQueryItems.Items.Insert(
0, "案卷号");
}
cboQueryItems.SelectedIndex
= 0;
}

/// <summary>
/// 设置查询项中要显示的数据列表
/// </summary>
/// <param name="sQueryItems">string类型数组</param>
public void SetQueryItems(string[] sQueryItems)
{
cboQueryItems.Items.Clear();

foreach (string queryItem in sQueryItems)
{
cboQueryItems.Items.Add(queryItem);
}
cboQueryItems.SelectedIndex
= 0;
}

/// <summary>
/// 设置查询项中要显示的数据列表
/// </summary>
/// <param name="listQueryItems">List泛型</param>
public void SetQueryItems(List<string> listQueryItems)
{
cboQueryItems.Items.Clear();
foreach (string queryItem in listQueryItems)
{
cboQueryItems.Items.Add(queryItem);
}
cboQueryItems.SelectedIndex
= 0;
}
#endregion

/// <summary>
/// 设置查询项的选择索引项
/// </summary>
/// <param name="index">索引的下标</param>
public void SetQueryItemsSelectIndex(int index)
{
this.cboQueryItems.SelectedIndex = index;
}

/// <summary>
/// 设置查询项的选择内容
/// </summary>
/// <param name="sTxt">查询项选中的内容</param>
public void SetQueryItemSelectText(string sTxt)
{
this.cboQueryItems.SelectedText =sTxt;
}

/// <summary>
/// 清空选项值
/// </summary>
public void ClearQueryItems()
{
cboQueryItems.Items.Clear();
}
#endregion

C.增加查询条件

代码
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> #region 增加查询条件单击事件 btnAddQueryCondition_Click(object sender, EventArgs e)

private void btnAddQueryCondition_Click(object sender, EventArgs e)
{
if (cboQueryItems.Items.Count == 0)
{
DialogHelper.ShowErrorMsg(
"查询项为空,不能进行查询!");
return;
}
else
{
string sQueryItem = cboQueryItems.Text.Trim(); //要查询的项
string sQueryValue = txtQueryValue.Text.Trim(); //查询项的值
string sCombinMode = string.Empty; //组合方式
string sQueryExpress = 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
= "AND NOT";
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 + " IS NULL OR " + sQueryItem + "= ''";
break;
case "不为空":
sQueryExpress
= sQueryItem + " IS NOT NULL And " + sQueryItem + "!= ''";
break;
case "大于":
if (dicQueryItem.Count == 0)
{
sQueryExpress
= sQueryItem + " > " + sQueryValue;
}
else
{
foreach (KeyValuePair<string, string> kvp in dicQueryItem)
{
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<string, string> kvp in dicQueryItem)
{
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<string, string> kvp in dicQueryItem)
{
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<string, string> kvp in dicQueryItem)
{
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<string, string> kvp in dicQueryItem)
{
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文件直接拖运到Microsoft Visual Studi工具箱中,就可以看到我们的组合查询控件了。在实际应用中,仅需以下两个步骤即可完成整个代码。

a.在窗体社会分配加载时绑定相应的查询项

代码
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> /// <summary>
/// 增加测试数据
/// </summary>
private void BindTestData()
{
dtTest
= new DataTable();
dtTest.Columns.Add(
new DataColumn("身份证号", typeof(System.String)));
dtTest.Columns.Add(
new DataColumn("姓名", typeof(System.String)));
dtTest.Columns.Add(
new DataColumn("QQ", typeof(System.String)));
dtTest.Columns.Add(
new DataColumn("年龄", typeof(System.Int16)));
dtTest.Columns.Add(
new DataColumn("出生时间", typeof(System.DateTime)));
}

private void FrmUcCombinQueryTest_Shown(object sender, EventArgs e)
{
BindTestData();

//绑定查询项
Dictionary<string, string> dicListQueryItems = new Dictionary<string, string>();
foreach (DataColumn dc in dtTest.Columns)
{
dicListQueryItems.Add(dc.ColumnName, dc.DataType.ToString());
}
ucCombinQueryTest.SetQueryItems(dicListQueryItems);
}

b.单击查询时,返回给用户的查询表达式,用户直接得到使用,在组合查询的OnQueryClicked事件代码中进行处理。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> private void ucCombinQueryTest_OnQueryClicked(object sender, EventArgs e)
{
//得到查询表达式
MessageBox.Show(ucCombinQueryTest.QueryExpression);
}

7、下面给出组合查询控件完整代码

代码
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#region 版权信息
/*---------------------------------------------------------------------*
// Copyright (C) 2008
http://www.cnblogs.com/huyong
// 版权所有。
// 项目 名称:《Winform通用控件库》
// 文 件 名: UcCombinQuery.cs
// 类 全 名: DotNet.Controls.UcCombinQuery
// 描 述: 组合查询控件
// 创建 时间: 2008-08-05
// 创建人信息: [**** 姓名:胡勇 QQ:80368704 E-Mail:80368704@qq.com *****]
*----------------------------------------------------------------------
*/
#endregion

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DotNet.Common;

namespace DotNet.Controls
{
/// <summary>
/// 组合查询控件
/// UcCombinQuery
/// 修改纪录
/// 2010-12-6 胡勇 优化相关代码。
/// 2010-11-29 胡勇 取消对:清除组合查询条件时的提示。
/// 2010-11-8 胡勇 要是查询项中包含"案卷号",则把案卷号移动到第一个查询项。
/// 2010-11-5 胡勇 对案卷号的查询,不加单引号。
/// 2010-8-30 胡勇 对查询字符型字段进行>、<、>=、<=、=操作时,其值自动加单引号。
/// 2008-08-05 胡勇 创建组合查询控件
/// <author>
/// <name>胡勇</name>
/// <QQ>80368704</QQ>
/// <Email>80368704@qq.com</Email>
/// </author>
/// </summary>
[ToolboxItem(true)]
[DefaultEvent(
"OnQueryClicked")]
[ToolboxBitmap(
typeof(UcCombinQuery), "DotNet.Controls.Images.UcCombinQuery.bmp")]
[Description(
"组合查询控件")]
public partial class UcCombinQuery : UserControl
{
#region 公共变量
Dictionary
<string, string> dicQueryItem = new Dictionary<string, string>();
#endregion

#region 公共方法
/// <summary>
/// 查询模式
/// </summary>
public enum QueryMode
{
/// <summary>
/// 固定查询
/// </summary>
FixQueryMode = 0x0001,
/// <summary>
/// 组合查询
/// </summary>
CompositeQueryMode = 0x0002
}

/// <summary>
/// 设置查询模式
/// </summary>
/// <param name="queryMode">查询模式</param>
public void SetQueryMode(QueryMode queryMode)
{
if (queryMode == QueryMode.FixQueryMode)
{
btnQueryMode.Text
= "固定查询";
}
else
{
btnQueryMode.Text
= "组合查询";
}
btnQueryMode_Click(
null, null);
}
#endregion

#region 可见性属性
private bool _QueryModeButtomVisible = true;
/// <summary>
/// 组合查询按钮是否可见
/// </summary>
[Category("组合查询"), Description("组合查询是否可见。")]
public bool QueryModeButtomVisible
{
get
{
return _QueryModeButtomVisible;
}
set
{
_QueryModeButtomVisible
= value;
if (!_QueryModeButtomVisible)
{
toolStripSeparator1.Visible
= false;
}
this.btnQueryMode.Visible = _QueryModeButtomVisible;
}
}
#endregion

#region 构造函数
public UcCombinQuery()
{
InitializeComponent();
}
#endregion

#region 组合查询表达式
/// <summary>
/// 单击[查询]按钮时发生
/// </summary>
[Category("组合查询"), Description("单击[查询]按钮时发生。"), Browsable(true)]
public event EventHandler OnQueryClicked;

private string _queryExpression;
/// <summary>
/// 最终的查询表达式,可直接用于Where子句中
/// </summary>
[Category("组合查询"), Description("最终的查询表达式,可直接用于Where子句中。"), Browsable(false)]
public string QueryExpression
{
get { return _queryExpression; }
set
{
_queryExpression
= value;
if (OnQueryClicked != null)
{
OnQueryClicked(
this, null);
}
}
}
#endregion

#region 查询项相关控制

#region 设置查询项中要显示的数据列表
/// <summary>
/// 设置查询项中要显示的数据列表(推荐使用这个方法)
/// </summary>
/// <param name="dicListQueryItems">表示键和值的集合(键:数据字段,值:数据字段对应的数据类型)</param>
public void SetQueryItems(Dictionary<string, string> dicListQueryItems)
{
cboQueryItems.Items.Clear();
dicQueryItem
= null;
dicQueryItem
= dicListQueryItems;
foreach (KeyValuePair<string, string> kvp in dicListQueryItems)
{
cboQueryItems.Items.Add(kvp.Key);
}

if (cboQueryItems.Items.Contains("案卷号"))//把案卷号显示在第一个
{
cboQueryItems.Items.Remove(
"案卷号");
cboQueryItems.Items.Insert(
0, "案卷号");
}
cboQueryItems.SelectedIndex
= 0;
}

/// <summary>
/// 设置查询项中要显示的数据列表
/// </summary>
/// <param name="sQueryItems">string类型数组</param>
public void SetQueryItems(string[] sQueryItems)
{
cboQueryItems.Items.Clear();

foreach (string queryItem in sQueryItems)
{
cboQueryItems.Items.Add(queryItem);
}
cboQueryItems.SelectedIndex
= 0;
}

/// <summary>
/// 设置查询项中要显示的数据列表
/// </summary>
/// <param name="listQueryItems">List泛型</param>
public void SetQueryItems(List<string> listQueryItems)
{
cboQueryItems.Items.Clear();
foreach (string queryItem in listQueryItems)
{
cboQueryItems.Items.Add(queryItem);
}
cboQueryItems.SelectedIndex
= 0;
}
#endregion

/// <summary>
/// 设置查询项的选择索引项
/// </summary>
/// <param name="index">索引的下标</param>
public void SetQueryItemsSelectIndex(int index)
{
this.cboQueryItems.SelectedIndex = index;
}

/// <summary>
/// 设置查询项的选择内容
/// </summary>
/// <param name="sTxt">查询项选中的内容</param>
public void SetQueryItemSelectText(string sTxt)
{
this.cboQueryItems.SelectedText =sTxt;
}

/// <summary>
/// 清空选项值
/// </summary>
public void ClearQueryItems()
{
cboQueryItems.Items.Clear();
}
#endregion

#region 事件代码

#region 窗体Load事件 UcCombinQuery_Load(object sender, EventArgs e)
private void UcCombinQuery_Load(object sender, EventArgs e)
{
this.Height = 25;
}
#endregion

#region 设置查询模式(组合查询或固定查询:btnQueryMode_Click(object sender, EventArgs e)
private void btnQueryMode_Click(object sender, EventArgs e)
{
cboQueryItems.Focus();
//spContainerHorizontal.Panel2Collapsed = !spContainerHorizontal.Panel2Collapsed;
lblOperator.Visible = !lblOperator.Visible;
cboOperator.Visible
= !cboOperator.Visible;
lblCombinMode.Visible
= !lblCombinMode.Visible;
cboCombinMode.Visible
= !cboCombinMode.Visible;
sp1.Visible
= !sp1.Visible;
if (btnQueryMode.Text == "固定查询")
{
btnQueryMode.Text
= "组合查询";
btnAddQueryCondition.Visible
= !btnAddQueryCondition.Visible;
btnClsQueryCondition.Visible
= !btnClsQueryCondition.Visible;
this.Height = 25;
btnQueryMode.Image
= DotNet.Controls.Properties.Resources.组合查询;//导入图片
}
else if (btnQueryMode.Text == "组合查询")
{
txtQueryCondition.Clear();
cboOperator.SelectedIndex
= 0;
cboCombinMode.SelectedIndex
= 0;
btnAddQueryCondition.Visible
= !btnAddQueryCondition.Visible;
btnClsQueryCondition.Visible
= !btnClsQueryCondition.Visible;
this.Height = 86;
btnQueryMode.Text
= "固定查询";
btnQueryMode.Image
= DotNet.Controls.Properties.Resources.固定查询;
}
}
#endregion

#region 增加查询条件单击事件 btnAddQueryCondition_Click(object sender, EventArgs e)

private void btnAddQueryCondition_Click(object sender, EventArgs e)
{
if (cboQueryItems.Items.Count == 0)
{
DialogHelper.ShowErrorMsg(
"查询项为空,不能进行查询!");
return;
}
else
{
string sQueryItem = cboQueryItems.Text.Trim(); //要查询的项
string sQueryValue = txtQueryValue.Text.Trim(); //查询项的值
string sCombinMode = string.Empty; //组合方式
string sQueryExpress = 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
= "AND NOT";
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 + " IS NULL OR " + sQueryItem + "= ''";
break;
case "不为空":
sQueryExpress
= sQueryItem + " IS NOT NULL And " + sQueryItem + "!= ''";
break;
case "大于":
if (dicQueryItem.Count == 0)
{
sQueryExpress
= sQueryItem + " > " + sQueryValue;
}
else
{
foreach (KeyValuePair<string, string> kvp in dicQueryItem)
{
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<string, string> kvp in dicQueryItem)
{
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<string, string> kvp in dicQueryItem)
{
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<string, string> kvp in dicQueryItem)
{
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<string, string> kvp in dicQueryItem)
{
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

#region 清除查询条件 btnClsQueryCondition_Click(object sender, EventArgs e)
//清除查询条件
private void btnClsQueryCondition_Click(object sender, EventArgs e)
{
if (txtQueryCondition.Text.Trim() != string.Empty)
{
txtQueryCondition.Clear();
}
}
#endregion

#region 查询单击事件 btnQuery_Click(object sender, EventArgs e)
private void btnQuery_Click(object sender, EventArgs e)
{
if (cboQueryItems.Items.Count == 0)
{
DialogHelper.ShowErrorMsg(
"查询项为空!");
return;
}
else
{
if (btnQueryMode.Text == "组合查询")
{
if (string.IsNullOrEmpty(txtQueryValue.Text.Trim()))
{
QueryExpression
= "1 = 1";
return;
}
else
{
if (StringHelper.HasDangerousWord(txtQueryValue.Text.Trim())) //危险字符判断
{
DialogHelper.ShowWarningMsg(
"对不起,你的输入包含危险字符,请重新输入!");
txtQueryValue.Clear();
txtQueryValue.Focus();
return;
}
else
{
if (dicQueryItem.Count == 0)
{
QueryExpression
= cboQueryItems.Text + " = '" + txtQueryValue.Text.Trim() + "'";//精确查询
}
else
{
foreach (KeyValuePair<string, string> kvp in dicQueryItem)
{
if (cboQueryItems.Text == kvp.Key)
{
if (kvp.Value == "System.DateTime")
{
QueryExpression
= cboQueryItems.Text + " = '" + txtQueryValue.Text.Trim() + "'";//精确查询
}
else
{
QueryExpression
= cboQueryItems.Text + " = '" + txtQueryValue.Text.Trim() + "'";//精确查询
}
}
}
}
}
}
}
else
{
if (string.IsNullOrEmpty(txtQueryCondition.Text.Trim()))
{
if (cboOperator.Text != "为空" && cboOperator.Text != "不为空")
{
if (txtQueryValue.Text.Trim() == string.Empty)
{
DialogHelper.ShowWarningMsg(
"必须输入查询项的值!");
txtQueryValue.Focus();
return;
}
else
{
if (StringHelper.HasDangerousWord(txtQueryValue.Text.Trim()))
{
DialogHelper.ShowWarningMsg(
"对不起,你的输入含有危险字符,请重新输入!");
txtQueryValue.Clear();
txtQueryValue.Focus();
return;
}
else
{
btnAddQueryCondition_Click(sender, e);
}
}
}
else
{
btnAddQueryCondition_Click(sender, e);
}
}
QueryExpression
= txtQueryCondition.Text.Trim();
}
}
}
#endregion

#endregion
}
}

© 2010 EricHu

原创作品,转贴请注明作者和出处,留此信息。

----------------------------------------------------------

cnBlobs:http://www.cnblogs.com/huyong/
CSDN:http://blog.csdn.net/chinahuyong

分享到:
评论

相关推荐

    C#企业级开发 第三方分页控件

    此控件为第三方分页控件,导入到vs开发工具中 可直接拖拽使用。

    JS日历控件 挑选了好几十个觉得这个最好看 适合企业级web应用

    JS日历控件 挑选了好几十个觉得这个最好看 适合企业级web应用

    尚硅谷Android视频教程《自定义控件》

    学习本套视频后,你会真正理解自定义控件在UI效果展示上的强大之处,并使你具备安卓自定义控件企业级开发的能力。· 00_源码、课件 · 01_自定义控件_什么是自定义控件 · 02_自定义控 资源太大,传百度网盘了,...

    久其表格OCX控件(共享版)

    久其表格OCX控件V2.1是久其ezReport报表组件的核心组件之一,是基于微软COM/COM+技术开发的报表二次开发组件,可以应用于企业级的报表开发,能够实现多种复杂报表的设计、打印等操作,具有以下几个特点: 1. ...

    皮肤控件研究文档,破解后的库文件,皮肤设计工具使用教程

    皮肤控件研究文档,破解后的库文件,皮肤设计工具使用教程 皮肤控件 skin++ skincrafter SkinFeature IrisSkin 我共享的都是本人实际验证过的精品,有文档,破解后的库文件,皮肤设计工具使用教程, 1 软件界面 每...

    ASP.NET企业级架构开发技术与案例教程

    重点讲解企业级架构开发技术,由浅入深地学习各项知识。全书共分9章,主要讲解ASP.NET基础、Web窗体技术与用户界面设计、数据访问层与业务逻辑层实现技术、数据控件与视图层实现技术、应用其他常用技术完善系统、ASP...

    DEV自定义控件,多按钮用户控件。包含新增,修改,删除,保存等

    在日常的企业应用中,会有一些共用的自定义控件,例如:新增 保存 修改 删除 打印。。。在很多页面上都可以使用,这时就需要我们一个自定义的控件,网上关于自定义的控件教程比较少,我也是借鉴了很多的教程,写了一...

    java版erp管理系统源码-ECUI:企业级WebUI控件库

    企业级Web UI控件库: 通过src/core.js来对事件与状态进行统一管理; 通过src/esr.js来统一管理路由; 通过src/etpl.js 来实现模板渲染; 通过src/adapter.js 来兼容第三方库; 通过src/control 来扩展原生 DOM 节点...

    axure通用元件库 Pc、Web端原型图组件库高保真.zip

    axure通用元件库 Pc、Web端原型图组件库高保真UI rp源文件

    短信猫前台ocx控件

    压缩包内有收发短信相关的ocx控件,可用于wavecom、西门子、金笛等多种品牌和型号,本人已经测试过可以用,大家可以用其进行前台的编写,可以用于企业级SAP\OA\邮件等预警功能。

    Axure原型及元件库(web端+移动端+小程序+微信公号).zip

    2、阿里内部 控件库AntD_Library_V2.01.rplib 3、蚂蚁金服体验中心移动端元件库.rplib 4、蚂蚁金服体验中心WEB端元件库.rplib 5、微信网站或小程序设计.rplib 6、微信WeUI 高保真 完整组件Axure元件库(app元件库) ...

    VS2008控件的使用 本书的目标是试图选择C#语言,采用B/S模式,讨论一般的企业级应用。

    Visual Studio 2008开发平台...从应用领域看,既可以是企业级应用,也可以是移动设备上应用。因此,介绍平台使用是非常丰富、而无能一书可以完成的,本书的目标是试图选择C#语言,采用B/S模式,讨论一般的企业级应用。

    True DBInput Pro - 高质量的数据控件

    DBInput Pro是一组集合,包含8个高质量的、data-aware的ActiveX输入控件和5个用来给开发人员提供他们构建企业级Internet/intranet数据库前端应用程序所需工具的对象。这些强大的控件替代了Visual Basic中用来格式化...

    NTKO文档在线编辑控件4.0.1.2

    23 轻量级 使用C语言直接开发COM接口,简洁高效,对内核函数的直接调用使得无需其它动态链接库的支持,兼容性极好! 24 在下载和上载Office文档时不会产生临时文件 使用流数据作为Office文档的数据源,控件本身不会...

    Spring+SpringMVC+Ehcache+Shiro+BootStrap企业级开发平台

    【B1】Spring+SpringMVC+Ehcache+Shiro+BootStrap企业级开发平台源码下载 内置功能 用户管理 角色管理 菜单管理 字典管理 部门管理 附件管理 参数管理 连接池监视 日志管理 技术选型 1、后端 核心框架...

    企业级的DLL全部源代码&nbsp;

    个企业级的DLL全部源代码,可以让你完全抛弃微软的Winsock控件创建快速网络应用程序,并支持很多Winsock控件不支持的底层功能。但因本套源码版权问题所以仅供大家学习,千万不要将其用于商业

    .Net微信企业级OA工作流系统源代码下载,仿微办公,考勤+外勤+报告+出差+报销

    模块功能 1、 人力资源(考勤,工资发放,出差请假,员工管理) 2、 CRM(客户管理,合同管理,产品管理) 3、 工作报告 4、 经费报销 5、 企业活动 6、 企业文档 7、 工作流程 8、 会议管理 9、 同事社区 10、新闻...

    FreeCL 1.03

    FreeCL 1.03(Free Control Library)是一个开源且免费的Windows控件库,它属于3D图形引擎FreeGE中的一部分,用户可以自由地用于个人或商业开发。FreeCL使用类似于.Net等快速开发工具的编码...支持企业级快速软件开发。

    windows动态链接库.rar

    Dynamic Link Library,即动态链接库,是Microsoft在Windows操作系统中实现共享...动态链接库在企业级开发中无处不在,本课程包含Windows动态链接库相关知识点,通过浅显易懂的代码与讲解,让你熟悉掌握动态链接库技术!

    大话企业级Android开发

    企业级Android开发,Android控件讲解,Android模式分析。如果你看了Android入门,但是发现写程序不知道怎么开始,那么这本书很适用。从这里开始你真正的Android开发之旅吧

Global site tag (gtag.js) - Google Analytics