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

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

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

 

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

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

  整个控件样式如下:

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

  说明:

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

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

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

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

c.  值:设置查询的值。

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

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

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

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

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

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

  3、本控件特点:

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

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

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

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

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

5、本控件核心代码

a. 得到组合查询表达式

 

  	#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. 设置查询项中要显示的数据列表

        #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  

C.增加查询条件

代码 



        #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.在窗体社会分配加载时绑定相应的查询项

 

代码 



        /// <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事件代码中进行处理。 

private void ucCombinQueryTest_OnQueryClicked( object sender, EventArgs e)
{
// 得到查询表达式
MessageBox.Show(ucCombinQueryTest.QueryExpression);
}

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

 

#region  版权信息

/*---------------------------------------------------------------------*

// Copyright (C) 2008 http://www.cnblogs.com/huyong

// 版权所有。 

// 项目  名称:《Winform通用控件库》

// 文  件  名: UcCombinQuery.cs

// 类  全  名: DotNet.Controls.UcCombinQuery 

// 描      述:  组合查询控件

// 创建  时间: 2008-08-05

// 创建人信息: [**** 姓名:胡勇 QQ:406590790 E-Mail:[email protected] *****]

*----------------------------------------------------------------------*/

#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>406590790</QQ>

    ///     <Email>[email protected]</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

    }

}

 

  

 

 

 

你可能感兴趣的:(查询)