WinForm DataGrid的功能扩展及实现 (已写完)
??????? 你是否在開(kāi)發(fā)WinForm應(yīng)用程序時(shí),通常使用DataGrid來(lái)作為數(shù)據(jù)的層現(xiàn),是否會(huì)用到DataGrid分頁(yè),添加序號(hào),添加全選,反選功能,有時(shí)還會(huì)用到不同數(shù)據(jù)顯示不同的顏色.DataGridGost為我們做了這一切,你只需要簡(jiǎn)單的設(shè)置,幾乎不用寫(xiě)一行代碼就能輕松完成.下面我們一起來(lái)進(jìn)入DataGridGost神奇的世界
[關(guān)鍵詞]DataGrid,DataGrid全選,自動(dòng)添加序號(hào).
1.系統(tǒng)概述
????? DataGridGos主要是封裝了對(duì)分頁(yè),添加自動(dòng)編號(hào),添加全選列,轉(zhuǎn)義列(比如,為2時(shí)顯示加急,3顯示不加急),指定條件的行著色等功能,指定條件的行才能被鉤選.
2、部份實(shí)現(xiàn)代碼
??? 添加全選列
????????{
????????????DataGridColorBoolColumn?dgbolChoose_temp;
????????????dgbolChoose_temp? = ? new ?DataGridColorBoolColumn();
???????????? //
???????????? // dgbolChoose_temp選擇列
???????????? //
????????????dgbolChoose_temp.HeaderText? = ?_CheckBoxTitle;
????????????dgbolChoose_temp.MappingName? = ? " NetlmChoose_2006 " ;
????????????dgbolChoose_temp.FalseValue? = ? false ;
????????????dgbolChoose_temp.NullValue? = ? "" ;
????????????dgbolChoose_temp.TrueValue? = ? true ;
????????????dgbolChoose_temp.Width? = ?_ChekcBoxWidth;
???????????? int ?size? = ?_CurrentDataGrid.TableStyles[ 0 ].GridColumnStyles.Count? + ? 1 ;
????????????DataGridColumnStyle[]?dgcsarry? = ? new ?DataGridColumnStyle[size];
????????????dgcsarry[ 0 ]? = ?dgbolChoose_temp;
???????????? for ?( int ?i? = ? 0 ;?i? < ?size? - ? 1 ;?i ++ )
????????????{
????????????????dgcsarry[i? + ? 1 ]? = ?_CurrentDataGrid.TableStyles[ 0 ].GridColumnStyles[i];
????????????}
????????????_CurrentDataGrid.TableStyles[ 0 ].GridColumnStyles.Clear();
????????????_CurrentDataGrid.TableStyles[ 0 ].GridColumnStyles.AddRange(dgcsarry);
????????}
?添加自動(dòng)編號(hào)列
????????{
????????????DataGridColorTextColumn?dgSerNum_temp;
????????????dgSerNum_temp? = ? new ?DataGridColorTextColumn();
????????????
????????????dgSerNum_temp.HeaderText? = ? " 序號(hào) " ;
????????????dgSerNum_temp.MappingName? = ? " NetlmSerNumUID " ;
????????????dgSerNum_temp.Alignment? = ?HorizontalAlignment.Center;
????????????dgSerNum_temp.Width? = ?_SerNumWidth;
???????????? int ?size? = ?_CurrentDataGrid.TableStyles[ 0 ].GridColumnStyles.Count? + ? 1 ;
????????????DataGridColumnStyle[]?dgcsarry? = ? new ?DataGridColumnStyle[size];
????????????dgcsarry[ 0 ]? = ?dgSerNum_temp;
???????????? for ?( int ?i? = ? 0 ;?i? < ?size? - ? 1 ;?i ++ )
????????????{
????????????????dgcsarry[i? + ? 1 ]? = ?_CurrentDataGrid.TableStyles[ 0 ].GridColumnStyles[i];
????????????}
????????????_CurrentDataGrid.TableStyles[ 0 ].GridColumnStyles.Clear();
????????????_CurrentDataGrid.TableStyles[ 0 ].GridColumnStyles.AddRange(dgcsarry);
????????}
??????? 在對(duì)輸入的條件直接轉(zhuǎn)換為布爾值時(shí),遇到些困難,開(kāi)始我想調(diào)用CodeDom直接生成表達(dá)式的值,但這樣做并沒(méi)有成功。比如 UserName==shumi 其中UserName表示的是列名,需要dr["UserName"].ToString()來(lái)讀出列的值,而在CodeDom中并不能讀出列的值,不知道那位高手有好的解決方案。我的做法是自已寫(xiě)了一個(gè)類(lèi)似編譯原理中的詞法分析的類(lèi),采用四元式的方式分析表達(dá)式并求出布爾值,但由于學(xué)編譯原理的知識(shí)差不多全還給老師了,所以在對(duì)四元式進(jìn)行DAG圖化簡(jiǎn)時(shí)還存在一定的問(wèn)題。
下面是部份實(shí)現(xiàn)代碼:
??
????????{
???????????? // 將表達(dá)式分詞
????????????ArrayList?ary? = ?StrToBoolExpression.ConvertExpression(str);
????????????
???????????? for ( int ?i = 0 ;i < ary.Count;i ++ )
????????????{
???????????????? if (i < ary.Count - 1 ? && ? ! IsOperator(ary[i].ToString()))
????????????????{
???????????????????? // 如果是字段,取出字段所表示的值
???????????????????? if (ary[i + 1 ].ToString()? != " ! " ? && ?ary[i + 1 ].ToString() != " && " ? && ?ary[i + 1 ].ToString() != " || " )
????????????????????{
????????????????????????ary[i]? = ?dr[ary[i].ToString()].ToString();
????????????????????}
????????????????}
????????????}
???????????? try
????????????{
???????????????? return ? bool .Parse(StrToBoolExpression.ComputePostfix(ary).ToString());
????????????}
???????????? catch
????????????{
???????????????? return ? false ;
????????????}
????????}
?
后記:
??????? 這幾天感冒了又拉肚子,好難受,從前天晚上都沒(méi)有吃過(guò)任何東西,今天終于吃了兩個(gè)雞蛋,身體開(kāi)始好轉(zhuǎn)了,所以整理了這篇文章。先休息一下,下一篇我將介紹根據(jù)DataGridGost自動(dòng)生成DataGridTableStyle的方法,并對(duì)自已開(kāi)發(fā)的這個(gè)小工具使用方法做個(gè)簡(jiǎn)單的介紹。這里先提供給大家下載,希望能給大家的開(kāi)發(fā)帶來(lái)幫助.
文件下載:
?類(lèi)庫(kù)文檔?????????????示例源代碼?????? DataGridTableStyle自動(dòng)生成工具?
接著上午沒(méi)有寫(xiě)完的說(shuō)一下DataGridTableStyle自動(dòng)生成工具的用法
?
軟件界面如上圖所示
設(shè)置好數(shù)據(jù)庫(kù)連接后單擊連接按扭,將加載當(dāng)前數(shù)據(jù)庫(kù)中的所有表和字段注釋.在左邊鉤選需要生成的表,如果需要將,整型字段轉(zhuǎn)義(1,顯示為男,2顯示為女)就在相應(yīng)的列名行鉤選轉(zhuǎn)義.在這里我設(shè)定主鍵是不能為轉(zhuǎn)義列的
上面的顯示就是用到了DataGridGhost
生成的代碼如下:
?1//作者:舒密????http://netlm.cnblogs.com
?2//廣西師范學(xué)院????TCN工?作室
?3
?4using?System;
?5using?System;
?6using?System.Collections;
?7using?System.ComponentModel;
?8using?System.Drawing;
?9using?System.Data;
10using?System.Windows.Forms;
11using?Netlm.DataGridColumnGost;
12?
13namespace?DataTableStyles
14{
15????/**////?<summary>
16????///?RAccountRolesTableStyles?
17????///?</summary>
18????public?class?RAccountRolesTableStyles?:?System.Windows.Forms.DataGridTableStyle
19????{
20????????private?System.ComponentModel.Container?components?=?null;
21????????public?RAccountRolesTableStyles()
22????????{
23????????????InitializeComponent();
24????????}
25????????/**////?<summary>?
26????????///?清理所有正在使用的資源。
27????????///?</summary>
28????????protected?override?void?Dispose(?bool?disposing?)
29????????{
30????????????if(?disposing?)
31????????????{
32????????????????if(components?!=?null)
33????????????????{
34????????????????????components.Dispose();
35????????????????}
36????????????}
37????????????base.Dispose(?disposing?);
38????????}
39????????private?DataGridColorTextColumn????dgColID;
40????????private?DataGridColorTextColumn????dgColAccountGuid;
41????????private?DataGridColorTextColumn????dgColRoleGuid;
42
43????????public?void?InitializeComponent()
44????????{
45????????????this.dgColID?=?new?DataGridColorTextColumn();
46????????????this.dgColAccountGuid?=?new?DataGridColorTextColumn();
47????????????this.dgColRoleGuid?=?new?DataGridColorTextColumn();
48????
49
50????????????//
51????????????//dgColID?用戶(hù)角色關(guān)系表ID自動(dòng)增加,
52????????????//
53????????????dgColID.Format?="";
54????????????dgColID.FormatInfo=null;
55????????????dgColID.HeaderText?="用戶(hù)角色關(guān)系表ID自動(dòng)增加,";
56????????????dgColID.MappingName?="ID";
57????????????dgColID.Width?=75;
58????????????//
59????????????//dgColAccountGuid?用戶(hù)GUID
60????????????//
61????????????dgColAccountGuid.Format?="";
62????????????dgColAccountGuid.FormatInfo=null;
63????????????dgColAccountGuid.HeaderText?="用戶(hù)GUID";
64????????????dgColAccountGuid.MappingName?="AccountGuid";
65????????????dgColAccountGuid.Width?=75;
66????????????//
67????????????//dgColRoleGuid?角色GUID
68????????????//
69????????????dgColRoleGuid.Format?="";
70????????????dgColRoleGuid.FormatInfo=null;
71????????????dgColRoleGuid.HeaderText?="角色GUID";
72????????????dgColRoleGuid.MappingName?="RoleGuid";
73????????????dgColRoleGuid.Width?=75;
74????????????//?
75????????????//?DataTableStyles
76????????????//?
77????????????this.GridColumnStyles.AddRange(new?System.Windows.Forms.DataGridColumnStyle[]?{
78??????????????????????????????????????????????????????????????????????????????????????????????this.dgColID,
79??????????????????????????????????????????????????????????????????????????????????????????????this.dgColAccountGuid,
80??????????????????????????????????????????????????????????????????????????????????????????????this.dgColRoleGuid
81??????????????????????????????????????????????????????????????????????????????????????????});
82????????}
83????}
84}
轉(zhuǎn)載于:https://www.cnblogs.com/netlm/archive/2006/09/03/493483.html
總結(jié)
以上是生活随笔為你收集整理的WinForm DataGrid的功能扩展及实现 (已写完)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AudioRecord 录音和播放的De
- 下一篇: 改进控制程序