WINFORM 多条件动态查询 通用代码的设计与实现
生活随笔
收集整理的這篇文章主要介紹了
WINFORM 多条件动态查询 通用代码的设计与实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????????? 經常碰到多條件聯合查詢的問題,以前的習慣認為很簡單總會從頭開始設計布局代碼,往往一個查詢面要費上老半天的功夫,而效果也不咋地。
??? 前段時間做了個相對通用的多條件動態查詢面,復用起來還是挺方便的,放上來共參考指導 。
?????????????????????????????????????????????????????????????????????? ??供下載的源文件鏈接? :? ?多條件動態查詢通用模板下載
???????? 主要的運行后布局:
???????????
??
主要的通用功能和要求:
???????????
??????? 主要的方法體:
? 動態的顯示查詢條件:
??????????????
?1???//初始化聯合查詢的頁面顯示?2
?3????????private?void?ConditionBind()
?4????????{
?5????????????/**///查詢條件邦定
?6????????????DataTable?dt?=?new?DataTable();
?7????????????DataColumnCollection?columns?=?dt.Columns;
?8????????????columns.Add("name");
?9????????????columns.Add("key");
10????????????DataRowCollection?rows?=?dt.Rows;
11????????????rows.Add("所有",?"All");
12????????????rows.Add("單據號",?"Code");
13????????????rows.Add("供應商名稱",?"SupplierName");
14????????????rows.Add("經辦人",?"EmployeesName");
15????????????rows.Add("時間",?"time");??
18????????????try
19????????????{
20????????????????for?(int?i?=?0;?i?<?this.fpl.Controls.Count;?i++)
21????????????????{
23????????????????????if?(this.Controls.Find("fpl"?+?i,?true).Length?>?0)
24????????????????????{
25????????????????????????((ComboBox)this.Controls.Find("cbSelect"?+?i,?true)[0]).DisplayMember?=?"name";
26????????????????????????((ComboBox)this.Controls.Find("cbSelect"?+?i,?true)[0]).ValueMember?=?"key";
27????????????????????????//用copy解決聯動問題
28????????????????????????((ComboBox)this.Controls.Find("cbSelect"?+?i,?true)[0]).DataSource?=?dt.Copy();
29????????????????????}
31????????????????}
34????????????}
35????????????catch?(Exception?ex)
36????????????{
37????????????????MessageBox.Show(ex.Message);
38????????????}
42????????}
????????? 按查詢條件設置顯示模式:
????????
?1??private?void?SetFilterCondition(ref?ComboBox?conditionselect)?2????????{
?3????????????try
?4????????????{
?5????????????????for?(int?i?=?0;?i?<?this.fpl.Controls.Count;?i++)
?6????????????????{
?7????????????????????if?(conditionselect.Name?==?"cbSelect"?+?i.ToString())
?8????????????????????{
?9????????????????????????if?(conditionselect.Text?==?"時間")
10????????????????????????{
11????????????????????????????if?(this.Controls.Find("fplFilter"?+?i,?true).Length?>?0)
12????????????????????????????????this.Controls.Find("fplFilter"?+?i,?true)[0].Visible?=?true;
13????????????????????????????if?(this.Controls.Find("txtFilter"?+?i,?true).Length?>?0)
14????????????????????????????????this.Controls.Find("txtFilter"?+?i,?true)[0].Visible?=?false;
15????????????????????????????if?(this.Controls.Find("cbFilter"?+?i,?true).Length?>?0)
16????????????????????????????????this.Controls.Find("cbFilter"?+?i,?true)[0].Visible?=?false;
17????????????????????????}
18????????????????????????else?if?(conditionselect.Text?==?"供應商名稱")//在通用中需要修改或添加
19????????????????????????{
20????????????????????????????if?(this.Controls.Find("fplFilter"?+?i,?true).Length?>?0)
21????????????????????????????????this.Controls.Find("fplFilter"?+?i,?true)[0].Visible?=?false;
22????????????????????????????if?(this.Controls.Find("txtFilter"?+?i,?true).Length?>?0)
23????????????????????????????????this.Controls.Find("txtFilter"?+?i,?true)[0].Visible?=?false;
24????????????????????????????if?(this.Controls.Find("cbFilter"?+?i,?true).Length?>?0)
25????????????????????????????????this.Controls.Find("cbFilter"?+?i,?true)[0].Visible?=?true;
26????????????????????????}
27????????????????????????else
28????????????????????????{
29????????????????????????????if?(this.Controls.Find("fplFilter"?+?i,?true).Length?>?0)
30????????????????????????????????this.Controls.Find("fplFilter"?+?i,?true)[0].Visible?=?false;
31????????????????????????????if?(this.Controls.Find("txtFilter"?+?i,?true).Length?>?0)
32????????????????????????????????this.Controls.Find("txtFilter"?+?i,?true)[0].Visible?=?true;
33????????????????????????????if?(this.Controls.Find("cbFilter"?+?i,?true).Length?>?0)
34????????????????????????????????this.Controls.Find("cbFilter"?+?i,?true)[0].Visible?=?false;
36????????????????????????}
40????????????????????}
41????????????????}
42????????????}
43????????????catch?(Exception?ex)
44????????????{
45????????????????MessageBox.Show(ex.Message);
46????????????}
47????????}
?
添加條件?
?2????????private?void?AddFilter()
?3????????{
?4????????????try
?5????????????{
?6????????????????for?(int?i?=?0;?i?<?this.fpl.Controls.Count;?i++)
?7????????????????{
?8????????????????????可替換代碼#region?可替換代碼
?9????????????????????//if?(((FlowLayoutPanel)this.fpl.Controls[i]).Visible?==?false)
10????????????????????//{
11????????????????????//????((FlowLayoutPanel)this.fpl.Controls[i]).Visible?=?true;
12????????????????????//????break;
13????????????????????//}
14????????????????????#endregion
16????????????????????if?(this.Controls.Find("fpl"?+?i,?true).Length?>?0)
17????????????????????{
18????????????????????????if?(this.Controls.Find("fpl"?+?i,?true)[0].Visible?==?false)
19????????????????????????{
20????????????????????????????this.Controls.Find("fpl"?+?i,?true)[0].Visible?=?true;
21????????????????????????????break;
22????????????????????????}
23????????????????????}
25????????????????}
26????????????}
27????????????catch?(Exception?ex)
28????????????{
29????????????????MessageBox.Show(ex.Message);
30????????????}
31????????}
??????????
提取sql語句
?
????????
?1??private?string?BuildSQL()?2????????{
?3????????????try
?4????????????{
?6????????????????StringBuilder?sb?=?new?StringBuilder();
?7????????????????//需要的時候修改表明?得到通用
?8????????????????sb.Append("select?*?from?InStoreBill_View?");
?9????????????????//用于判斷是否是第一條數據?用于添加where的判斷
10????????????????int?isFirst?=?0;
11????????????????for?(int?i?=?0;?i?<?this.fpl.Controls.Count;?i++)
12????????????????{
13????????????????????生成sql語句#region???生成sql語句
14????????????????????if?(this.Controls.Find("fpl"?+?i,?true)[0].Visible?==?true)
15????????????????????{
16
17????????????????????????if?(this.Controls.Find("cbSelect"?+?i,?true)[0].Text?!=?"所有")
18????????????????????????{
19????????????????????????????ComboBox?selectCondition?=?(ComboBox)this.Controls.Find("cbSelect"?+?i,?true)[0];
20
21????????????????????????????if?(this.Controls.Find("txtFilter"?+?i,?true)[0].Visible?==?true)
22????????????????????????????{//為本類型
23????????????????????????????????isFirst++;
24????????????????????????????????if?(isFirst?==?1)//如果是第一次進入的話??isfirst應該為1
25????????????????????????????????{
26????????????????????????????????????sb.Append("??where??");
27????????????????????????????????}
28????????????????????????????????else?if?(isFirst?>?1)
29????????????????????????????????{
30????????????????????????????????????sb.Append("?and?");
31????????????????????????????????}
32????????????????????????????????else
33????????????????????????????????{?}
34
35????????????????????????????????sb.Append(string.Format("?{0}?like?'%{1}%'?",?selectCondition.SelectedValue.ToString().Trim(),?this.Controls.Find("txtFilter"?+?i.ToString(),?true)[0].Text.Trim()));
36
37????????????????????????????}
38????????????????????????????else?if?(this.Controls.Find("cbFilter"?+?i,?true)[0].Visible?==?true)
39????????????????????????????{//下拉框類型
40????????????????????????????????isFirst++;
41????????????????????????????????if?(isFirst?==?1)//如果是第一次進入的話??isfirst應該為1
42????????????????????????????????{
43????????????????????????????????????sb.Append("??where??");
44????????????????????????????????}
45????????????????????????????????else?if?(isFirst?>?1)
46????????????????????????????????{
47????????????????????????????????????sb.Append("?and?");
48????????????????????????????????}
49????????????????????????????????else
50????????????????????????????????{?}
51????????????????????????????????sb.Append(string.Format("?{0}?like?'%{1}%'?",?selectCondition.SelectedValue.ToString().Trim(),?this.Controls.Find("cbFilter"?+?i.ToString(),?true)[0].Text.Trim()));
52
53
54????????????????????????????}
55????????????????????????????else
56????????????????????????????{//時間類型
57????????????????????????????????isFirst++;
58????????????????????????????????if?(isFirst?==?1)//如果是第一次進入的話??isfirst應該為1
59????????????????????????????????{
60????????????????????????????????????sb.Append("??where??");
61????????????????????????????????}
62????????????????????????????????else?if?(isFirst?>?1)
63????????????????????????????????{
64????????????????????????????????????sb.Append("?and?");
65????????????????????????????????}
66????????????????????????????????else
67????????????????????????????????{?}
68????????????????????????????????sb.Append(string.Format("?{0}?between?'{1}'?and?'{2}'?",?selectCondition.SelectedValue.ToString().Trim(),?((DateTimePicker)this.Controls.Find("dtp"?+?i.ToString()?+?"Begin",?true)[0]).Value.ToShortDateString(),?((DateTimePicker)this.Controls.Find("dtp"?+?i.ToString()?+?"End",?true)[0]).Value.ToShortDateString()));
69
70????????????????????????????}
71
72????????????????????????}
73????????????????????}
74????????????????????#endregion
75????????????????}
76????????????????return?sb.ToString();
77????????????}
78????????????catch?(Exception?ex)
79????????????{
80????????????????MessageBox.Show(ex.Message);
81????????????????return?"";
82????????????}
84????????}
?
?????? 注: 在設計過程中覺得最煩亂得是布局的設計 ,也許是不太熟練,浪費了很多的時間,好在通用或之際copy就ok了
????供下載的源文件鏈接? :? ?多條件動態查詢通用模板下載
轉載于:https://www.cnblogs.com/huomm/archive/2008/03/22/1117552.html
總結
以上是生活随笔為你收集整理的WINFORM 多条件动态查询 通用代码的设计与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习 TTreeView [8] - A
- 下一篇: 刚做项目的时候