您好,登錄后才能下訂單哦!
小編給大家分享一下C#WinForm如何利用DataGridView創(chuàng)作高級(jí)查詢窗體,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
簡(jiǎn)單點(diǎn)來說,高級(jí)查詢關(guān)鍵就是:
select * from 表名 where 字段=’***’ and字段>’***’ or字段<’***’ and字段 like ‘%***%’ or字段<>’***’……,where后面的字符串的拼接。
假如,有辦法獲取到where后面的字符,那么高級(jí)查詢就可以做到了。下面就來利用DataGridView創(chuàng)作高級(jí)查詢。
第一步,先創(chuàng)建一個(gè)窗體FrmSelect.cs,然后修改一些屬性:
1、 StartPosition屬性值修改為CenterScreen,將窗體顯示作固定。
2、 ControlBox屬性值修改為False,將窗體的關(guān)閉等按鈕作隱藏。
第二步,添加DataGridView,然后修改一些屬性:
1、 RowHeaderVisible屬性修改為False,將DataGridView最左邊的空白處作隱藏。
2、 EditModel屬性修改為EditOnEnter,將DataGridView的雙擊編輯改為單擊編輯。
3、 添加4列固定列:項(xiàng)目、條件、邏輯的ColumnType都選擇為:
DataGridViewComboBoXExColumn,賦值的ColumnType選擇為:TextBox的。
效果如下圖:
下面來實(shí)現(xiàn),當(dāng)點(diǎn)擊確定時(shí),獲取拼接好的字符串,并關(guān)閉查詢窗體:
一、查詢窗體代碼:
#region 定義 public DataTable dt;//用于,接收傳入的數(shù)據(jù) public string sql = "";//用于,保存查詢條件生成的字符串 #endregion #region 取消 private void tsClose_Click(object sender, EventArgs e) { this.Close();//關(guān)閉查詢窗體 } #endregion #region 確定 private void tsSave_Click(object sender, EventArgs e) { string ite = "", ope = "", val = "", log = ""; sql = ""; this.dgv.EndEdit();//結(jié)束DataGridView的編輯狀態(tài)。這句非常重要,若沒有這句則無法獲取正在編輯的值。 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();//項(xiàng)目 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();//關(guān)閉查詢窗體 } #endregion #region 重置 private void tsWaiver_Click(object sender, EventArgs e) { //重置DataGridView dgv.Rows.Clear(); sql = ""; } #endregion #region 當(dāng)窗體加載完畢時(shí),執(zhí)行 private void FrmSelect_Load(object sender, EventArgs e) { SetSelectItems();//設(shè)置高級(jí)查詢條件的選項(xiàng) } #endregion #region 設(shè)置高級(jí)查詢條件的選項(xiàng) /// <summary> /// 設(shè)置高級(jí)查詢條件的選項(xiàng) /// </summary> private void SetSelectItems() { //根據(jù)傳入的DataTable,獲取列名,并添加到“項(xiàng)目” 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
二、作為主窗體,先點(diǎn)擊高級(jí)查詢按鈕,打開查詢窗體。主窗體代碼:
#region 高級(jí)查詢 private void tsSelect_Click(object sender, EventArgs e) { FrmSelect frmSelect = new FrmSelect(); frmSelect.dt = sql_Base._GetAllTable("STOCK");//傳入DataTable數(shù)據(jù) frmSelect.ShowDialog(); string sql = frmSelect.sql;//返回的高級(jí)查詢字符串。 frmSelect.Dispose(); } #endregion
綜上,利用DataGridView自身能夠自動(dòng)添加行特點(diǎn),達(dá)到一種動(dòng)態(tài)添加的效果。并且可成功獲得的sql字符串拼接,有了where后面的sql字符串拼接,你想怎么查就怎么查。所以高級(jí)查詢窗體創(chuàng)作是成功的。
效果圖1:
效果圖2:
以上是“C#WinForm如何利用DataGridView創(chuàng)作高級(jí)查詢窗體”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。