.NET新手指南:輕松自定義DataGridView控件
譯文【51CTO快譯】在創(chuàng)建到外部數(shù)據(jù)的連接時,.NET配置向?qū)且粋€很好的開始,它不僅可以為你創(chuàng)建點(diǎn)擊式連接,還可以快速簡單地產(chǎn)生一個控件,用于用戶檢索、顯示和操作數(shù)據(jù),但向?qū)Ш苌佼a(chǎn)生用戶需要的功能的控件,你可能想對向?qū)Мa(chǎn)生的控件進(jìn)行調(diào)整——增加需要的功能。
本文的目標(biāo)讀者是.NET新手。首先講述如何創(chuàng)建一個新連接,然后講述如何自定義結(jié)果控件,使用Visual Basic Express(VB Express)配置向?qū)В疚膶⒚枋鋈绾翁畛銬ataGridView控件,然后按照以下步驟進(jìn)行提高:
1、行的顯示顏色交替,構(gòu)成一個綠色條效果;
2、禁用掉DataGridView內(nèi)置的單列排序功能;
3、執(zhí)行這個窗體時顯示編輯行。
開始
VB Express提供了許多方法檢索和操作外部數(shù)據(jù),例如,只需要運(yùn)行VB Express的配置向?qū)Ь涂梢越⒁粋€到MS Access 示例數(shù)據(jù)庫Northwind.mdb中Customers的連接:
1、啟動VB Express,然后在標(biāo)準(zhǔn)工具欄上點(diǎn)擊新建項(xiàng)目按鈕,在彈出的對話框中選擇Windows Form Application;
2、在名稱控件處輸入一個有意義的名字,點(diǎn)擊確定按鈕;
3、點(diǎn)擊解決方案資源管理器右下角的數(shù)據(jù)源標(biāo)簽,如果沒有看到這個標(biāo)簽,從“數(shù)據(jù)”菜單中選擇顯示數(shù)據(jù)源即可;
4、點(diǎn)擊新建數(shù)據(jù)源按鈕,啟動新建數(shù)據(jù)源配置向?qū)В?/P>
5、點(diǎn)擊下一步,數(shù)據(jù)庫選項(xiàng)保持默認(rèn)設(shè)置;
6、在下一個面板中點(diǎn)擊新建連接;
7、在彈出的新建連接對話框中,點(diǎn)擊修改,從彈出的修改數(shù)據(jù)源對話框中選擇Access數(shù)據(jù)庫文件,然后點(diǎn)擊確定按鈕;
8、在新建連接對話框中點(diǎn)擊瀏覽,找到Northwind.mdb的位置(在Office目錄的Samples文件夾下),然后點(diǎn)擊確定按鈕;
9、點(diǎn)擊測試連接,然后點(diǎn)擊確定按鈕清除確認(rèn)消息;
10、如果連接工作正常,點(diǎn)擊確定返回向?qū)Т翱冢缓簏c(diǎn)擊下一步繼續(xù);
11、VB Express會詢問你是否要拷貝數(shù)據(jù)庫,如果你選擇“是”,將會把整個數(shù)據(jù)庫拷貝到你的項(xiàng)目下,在這個例子中,我們選擇“否”;
12、接下來的面板中讓你將配置信息保存到配置文件中,默認(rèn)是要保存,點(diǎn)擊下一步即可(向?qū)z索數(shù)據(jù)庫對象,并在源文件中顯示它們,在這里你可以識別一下將要在.Net項(xiàng)目中檢索和操作的數(shù)據(jù));
13、點(diǎn)擊“+”號展開表節(jié)點(diǎn),選中Customers表,保留默認(rèn)的NorthwindDataSet,VB Express的數(shù)據(jù)集;
14、點(diǎn)擊完成,VB Express將會檢索指定的數(shù)據(jù)。
創(chuàng)建好連接后,還需要一個窗體來顯示數(shù)據(jù),請跟著我做:
1、點(diǎn)擊數(shù)據(jù)源標(biāo)簽;
2、點(diǎn)擊Form1標(biāo)簽,然后從數(shù)據(jù)源標(biāo)簽拖動Customers數(shù)據(jù)集到窗體設(shè)計(jì)器中的Form1上,VB Express將會產(chǎn)生一個DataGridView控件并自動命名,圖1顯示了結(jié)果窗體和窗體設(shè)計(jì)器中的網(wǎng)格。
窗體和窗體設(shè)計(jì)器中的網(wǎng)格:配置向?qū)?chuàng)建的可以顯示數(shù)據(jù)的控件
3、從文件菜單中選擇保存所有,然后點(diǎn)擊保存按鈕。
至此,你已經(jīng)有一個來自Northwind數(shù)據(jù)庫的數(shù)據(jù)集,和一個顯示該數(shù)據(jù)的DataGridView控件及控件所在的窗體,所有需要做的就是運(yùn)行一下向?qū)А?/P>
#p#
行顯示顏色交替
***個增強(qiáng)是,使用向?qū)?chuàng)建的控件可以通過修改行的顏色提高易讀性,使用DataGridView時,可以很容易修改屬性:
1、在窗體設(shè)計(jì)器中,選擇DataGridView控件(不要雙擊,將會打開窗體的代碼頁);
2、在屬性窗口中,打開AlternatingRowsDefaultCellStyle屬性;
3、點(diǎn)擊BackColor屬性的下拉箭頭,顯示CellStyleBuilder對話框;
4、選擇一個與當(dāng)前顏色不同的顏色(默認(rèn)是白色),在這個例子中,選擇藍(lán)色,如圖2所示,然后點(diǎn)擊確定按鈕。
CellStyleBuilder對話框:選擇一個交替的行顏色
5、按F5運(yùn)行程序,圖3顯示了使用交替顏色填充的網(wǎng)格控件。
填充好的網(wǎng)格控件:行的顏色在藍(lán)色和白色間交替使用
記住,只設(shè)置交替的一行的屬性顏色就可以了,不是要設(shè)置所有行的屬性,如果還想更多一點(diǎn)變化,相應(yīng)設(shè)置BackColor和ForeColor即可。
控制排序順序
最初,你產(chǎn)生的控件是按表的順序填充的,因?yàn)檫€沒有指定排序順序,然而,DataGridView是天生就支持排序的,只需要點(diǎn)擊標(biāo)題欄,控件就會以該欄升序排序記錄,再點(diǎn)擊一次就按降序排序,對于大多數(shù)控件而言,在填充控件時你都可以排序數(shù)據(jù):
1、在窗體設(shè)計(jì)器中,選擇CustomersBindingSource組件,將會在相應(yīng)的屬性窗口中更新其項(xiàng)目;
2、在窗口的底部,找到sort屬性,輸入city,如圖4所示。
找到Sort,輸入City:指定一個排序列
3、按F5運(yùn)行程序,正如你在圖5中所看到的,控件按照City值以升序排序記錄。如果想降序排列的話,只需要加上DESC關(guān)鍵詞就可以了,即輸入City DESC。
控件排序記錄:窗體通過City值排序記錄
你可能會禁止這個原生態(tài)的排序功能,但你需要為每個禁止排序的列編寫一小段代碼,例如,為了禁止Contact Title列的排序功能,請跟著我做:
1、在設(shè)計(jì)視圖窗體中,從視圖菜單選擇代碼,或按F7;
2、開始輸入代碼,很快你就會發(fā)現(xiàn)智能感應(yīng)不會顯示控件包含的列名,相反,它是按照位置顯示列名的,這不是引用列的***辦法;
3、為了修改DataGridView控件的列的默認(rèn)名稱,必須修改控件本身的Columns集合,在設(shè)計(jì)視圖中,雙擊網(wǎng)格(不是窗體),你可能需要稍微放大一下窗體,以便準(zhǔn)確選中一個網(wǎng)格,當(dāng)屬性標(biāo)題顯示CustomersDataGridView時,你就可以確定選中的是網(wǎng)格而不是窗體了;
4、定位Columns集合,然后點(diǎn)擊Builder按鈕,啟動編輯列對話框,如圖6所示。
點(diǎn)擊Builder按鈕:查看網(wǎng)格的Columns集合
5、在選擇列控件中,選擇ContactTitle;
6、在設(shè)計(jì)區(qū)域(右下角),這個控件的Name屬性值是DataGridViewTextBoxColumn4,使用一個更有意義的名字替代它,這里我們輸入DataGridViewTextBoxContactTitle,如圖7所示。對那些不想設(shè)置的隱形列,將其Visible屬性設(shè)置為false即可。
為Name屬性輸入一個有意義的名稱
7、點(diǎn)擊確定返回代碼窗口(Form1.vb);
8、輸入下面的代碼:
- Me.DataGridViewTextBoxContactTitle.SortMode = DataGridViewColumnSortMode.NotSortable
這一次智能感應(yīng)按名稱而不是位置列出了列,如圖8所示。
智能感應(yīng)按名稱列出了列:使用列名代替位置號
9、保存所做的修改;
10、按F5執(zhí)行項(xiàng)目,在結(jié)果窗體中,點(diǎn)擊ContactTitle的標(biāo)題欄,這一次窗體不會排序記錄了,這是因?yàn)檩斎氲拇a禁用了排序功能。
#p#
顯示編輯行
目前,示例窗體顯示了91條記錄,此時如果用戶想要插入一行記錄,必須滾動窗體到編輯行,你可以通過編程讓窗體自動顯示編輯行,將下面的代碼添加到窗體的Load事件中,如圖9所示。
- Me.CustomersDataGridView.FirstDisplayedScrollingRowIndex = CustomersDataGridView.Rows.Count - 1
在窗體的Load事件中添加代碼:強(qiáng)制窗體在載入時顯示編輯行
按F5運(yùn)行這個窗體,正如你在圖10中所看到的,這個窗體顯示了一些記錄和編輯行。
顯示記錄和編輯行的窗體:現(xiàn)在啟動窗體,可以看到顯示了編輯行
這個語句從行數(shù)量減去一個1,這樣可以防止異常發(fā)生,因?yàn)榫庉嬓袥]有真正的索引,直到你點(diǎn)擊了它,即使它影響了行的數(shù)量。這個方法僅僅是確保***一行是可見的,所有的記錄仍然是可用的,現(xiàn)在窗體顯示的記錄條數(shù)與其容量緊密相關(guān),代碼不需要做任何修改。
通過禁用編輯行,這樣就將窗體改為瀏覽窗體了,不能再插入新的行了,要禁用編輯行,只需要在窗體的Load事件中添加一句:
- DataGridView1.AllowUserToAddRows = False
將AllowUserToAddRows屬性設(shè)置True就啟用編輯行。
自定義控件使其更易用和靈活
自定義示例窗體并不需要花多少時間:
1、只需要簡單的修改就可以實(shí)現(xiàn)交替顏色行;
2、只需要一行代碼就可以禁用掉內(nèi)置的排序功能;
3、只需要一行代碼就可以顯示編輯行。
如果你是從Access或SQL Server轉(zhuǎn)過來的,當(dāng)你見識了可以創(chuàng)建和實(shí)現(xiàn)一個既可以瀏覽數(shù)據(jù)又可以編輯數(shù)據(jù)的窗體時,你一定會感到滿意。
原文:The .NET Newbie's Guide to Customizing the DataGridView Control
作者:Charlotte Foust, Susan Sales Harkins
【編輯推薦】