小编给大家分享一下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创作高级查询窗体”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。