千家信息网

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

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,小编给大家分享一下C#WinForm如何利用DataGridView创作高级查询窗体,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解
千家信息网最后更新 2024年11月20日C#WinForm如何利用DataGridView创作高级查询窗体

小编给大家分享一下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 设置高级查询条件的选项        ///         /// 设置高级查询条件的选项        ///         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创作高级查询窗体"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0