zoukankan      html  css  js  c++  java
  • 原创企业级控件库之组合查询控件

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

    发布日期: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事件代码中进行处理。 

    privatevoid 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:406590790@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>406590790</QQ>
        ///     <Email>406590790@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
        }
    }
    

     

      

     

     

     

  • 相关阅读:
    面向对象的七大设计原则
    06章 初始继承和多态
    面向太阳,不问春暖花开
    05章 体检套餐管理系统
    02章《深入C#数据类型》项目经理评分
    MongoDB快速入门(十二) -- 索引
    MongoDB快速入门(十一)- sort() 方法
    MongoDB快速入门(十)- Limit(),Skip() 方法
    MongoDB快速入门(九)- 投影
    MongoDB快速入门(八)- 删除文档
  • 原文地址:https://www.cnblogs.com/huyong/p/1902714.html
Copyright © 2011-2022 走看看