C#WinForm如何利用DataGridView创作高级查询窗体

2023-05-21,

小编给大家分享一下C#WinForm如何利用DataGridView创作高级查询窗体,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

简单点来说,高级查询关键就是:

select * from 表名 where 字段=’***’ and字段>’***’ or字段<’***’ and字段 like ‘%***%’ or字段<>’***’……,where后面的字符串的拼接。

假如,有办法获取到where后面的字符,那么高级查询就可以做到了。下面就来利用DataGridView创作高级查询。

第一步,先创建一个窗体FrmSelect.cs,然后修改一些属性:

                1、  StartPosition属性值修改为CenterScreen,将窗体显示作固定。

                2、  ControlBox属性值修改为False,将窗体的关闭等按钮作隐藏。

第二步,添加DataGridView,然后修改一些属性:

                1、  RowHeaderVisible属性修改为False,将DataGridView最左边的空白处作隐藏。

                2、  EditModel属性修改为EditOnEnter,将DataGridView的双击编辑改为单击编辑。

                3、  添加4列固定列:项目、条件、逻辑的ColumnType都选择为:

         DataGridViewComboBoXExColumn,赋值的ColumnType选择为:TextBox的。

效果如下图:

    下面来实现,当点击确定时,获取拼接好的字符串,并关闭查询窗体:

一、查询窗体代码:

        #region 定义
        public DataTable dt;//用于,接收传入的数据
        public string sql = "";//用于,保存查询条件生成的字符串
        #endregion
        #region 取消
        private void tsClose_Click(object sender, EventArgs e)
        {
            this.Close();//关闭查询窗体
        }
        #endregion
        #region 确定
        private void tsSave_Click(object sender, EventArgs e)
        {
            string ite = "", ope = "", val = "", log = ""; sql = "";
            this.dgv.EndEdit();//结束DataGridView的编辑状态。这句非常重要,若没有这句则无法获取正在编辑的值。
            for (int i = 0; i < dgv.Rows.Count - 1; i++)
            {
                if (dgv.Rows[i].Cells[0].Value != null && dgv.Rows[i].Cells[1].Value != null && dgv.Rows[i].Cells[2].Value != null && dgv.Rows[i].Cells[3].Value != null)
                {
                    ite = dgv.Rows[i].Cells[0].Value.ToString().Trim();//项目
                    ope = dgv.Rows[i].Cells[1].Value.ToString().Trim();//条件
                    val = dgv.Rows[i].Cells[2].Value.ToString().Trim();//赋值
                    log = dgv.Rows[i].Cells[3].Value.ToString().Trim();//逻辑
                    //字符串拼接
                    if (ite != "" && ope == "相同" && val != "" && log != "")
                    {
                        sql += log + " " + ite + "='" + val + "' ";
                    }
                    if (ite != "" && ope == "大于" && val != "" && log != "")
                    {
                        sql += log + " " + ite + ">'" + val + "' ";
                    }
                    if (ite != "" && ope == "小于" && val != "" && log != "")
                    {
                        sql += log + " " + ite + "<'" + val + "' ";
                    }
                    if (ite != "" && ope == "包含" && val != "" && log != "")
                    {
                        sql += log + " " + ite + " like '%" + val + "%' ";
                    }
                    if (ite != "" && ope == "除外" && val != "" && log != "")
                    {
                        sql += log + " " + ite + "<>'" + val + "' ";
                    }
                }
            }
            this.Close();//关闭查询窗体
        }
        #endregion
        #region 重置
        private void tsWaiver_Click(object sender, EventArgs e)
        {
            //重置DataGridView
            dgv.Rows.Clear();
            sql = "";
        }
        #endregion
        #region 当窗体加载完毕时,执行
        private void FrmSelect_Load(object sender, EventArgs e)
        {
            SetSelectItems();//设置高级查询条件的选项
        }
        #endregion
        #region 设置高级查询条件的选项
        /// <summary>
        /// 设置高级查询条件的选项
        /// </summary>
        private void SetSelectItems()
        {
            //根据传入的DataTable,获取列名,并添加到“项目”
            this.Column1.Items.Clear();
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                this.Column1.Items.Add(dt.Columns[i].ColumnName);
            }
            //添加条件
            this.Column2.Items.Clear();
            this.Column2.Items.Add("包含");
            this.Column2.Items.Add("相同");            
            this.Column2.Items.Add("大于");
            this.Column2.Items.Add("小于");
            this.Column2.Items.Add("除外");
            //添加逻辑
            this.Column4.Items.Clear();
            this.Column4.Items.Add("And");
            this.Column4.Items.Add("Or");
        }
        #endregion

二、作为主窗体,先点击高级查询按钮,打开查询窗体。主窗体代码:

        #region 高级查询
        private void tsSelect_Click(object sender, EventArgs e)
        {
            FrmSelect frmSelect = new FrmSelect();
            frmSelect.dt = sql_Base._GetAllTable("STOCK");//传入DataTable数据            
            frmSelect.ShowDialog();
            string sql = frmSelect.sql;//返回的高级查询字符串。
            frmSelect.Dispose();
        }
        #endregion

      综上,利用DataGridView自身能够自动添加行特点,达到一种动态添加的效果。并且可成功获得的sql字符串拼接,有了where后面的sql字符串拼接,你想怎么查就怎么查。所以高级查询窗体创作是成功的。

    效果图1:

    效果图2:

以上是“C#WinForm如何利用DataGridView创作高级查询窗体”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注本站行业资讯频道!