明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

DataGrid Web控件深度歷險(xiǎn)(2) Part2

[摘要]在本文的第一部分,我們研究了如何設(shè)定DataGrid Web控件的顯示屬性以及如何通過樣式設(shè)定DataGrid的頁眉、頁腳、行和交替行的顯示。所有這些技術(shù)或是用于設(shè)定整個(gè)DataGrid的顯示,或是用于設(shè)定DataGrid中行的顯示。但是如何設(shè)定DataGrid中列的顯示屬性?其實(shí)并不難,接著讀你...
在本文的第一部分,我們研究了如何設(shè)定DataGrid Web控件的顯示屬性以及如何通過樣式設(shè)定DataGrid的頁眉、頁腳、行和交替行的顯示。所有這些技術(shù)或是用于設(shè)定整個(gè)DataGrid的顯示,或是用于設(shè)定DataGrid中行的顯示。但是如何設(shè)定DataGrid中列的顯示屬性?其實(shí)并不難,接著讀你就知道了。

設(shè)定哪些列應(yīng)該顯示

缺省情況下DataGrid在生成的HTML表格中為SQL查詢返回的每一列生成一個(gè)對應(yīng)的列。但是在一些情況下僅希望在DataGrid中顯示這些列中的一部分列。例如,在我正在進(jìn)行的示例中,通過調(diào)用sp_Popularity存儲(chǔ)過程顯示了ASPFAQs.com最受歡迎的10個(gè)問題。它包含F(xiàn)AQID列,或許我并不希望顯示該列。

如果不想在DataGrid中顯示數(shù)據(jù)庫查詢返回的所有列,必須顯式地聲明所有希望顯示的列。第一步是將DataGrid的AutoGenerateColumns屬性設(shè)為False。一旦執(zhí)行完這個(gè)操作,就需要通過BoundColumn Web控件設(shè)定需顯示的列,如下所示:

<asp:DataGrid runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="DatabaseColumnName1" ... />
<asp:BoundColumn DataField="DatabaseColumnName2" ... />
...
<asp:BoundColumn DataField="DatabaseColumnNameN" ... />
</Columns>
</asp:datagrid>
對于每一個(gè)希望顯示的列,需要通過一個(gè)包含DataField屬性的<asp:BoundColumn ... />標(biāo)記來指定數(shù)據(jù)庫中需要顯示的列。所有這些BoundColumn標(biāo)記必須包含在Column標(biāo)記內(nèi)。(也可通過編程的方式指定這些綁定列,但是它的可讀性差,并且需要很多代碼!)請注意只有通過BoundColumn標(biāo)記指定的列才會(huì)在DataGrid中顯示,你必須指定需要顯示的列!

BoundColumn控件的優(yōu)點(diǎn)在于它包含一些設(shè)定格式的屬性,包括:

l HeaderText — 設(shè)定列標(biāo)題的文字。

l FooterText — 設(shè)定列尾的文字(記住若要在DataGrid中顯示頁腳,應(yīng)將ShowFooter設(shè)為True)。

l HeaderStyle/FooterStyle/ItemStyle — 包含與DataGrid樣式相同的屬性。對設(shè)定列居中、前景色、背景色等很有用。

l DataFormatString — 設(shè)置格式命令。(參考下面的示例;參考文檔以獲得全部的格式化規(guī)范)

讓我們看一下如何通過使用BoundColumn標(biāo)記來進(jìn)一步增強(qiáng)前面的示例。正如前面所提到的,我們不想顯示FAQID或FAQCategoryID列,并且我們希望對數(shù)字列(ViewCount)和日期/時(shí)間列(DateEntered)設(shè)定格式。另外,我們希望數(shù)字列的值居中。這些均可通過幾行易于閱讀易于理解的代碼完成:

<asp:DataGrid runat="server" id="dgPopularFAQs"
BackColor="#eeeeee" Width="85%"
HorizontalAlign="Center"
Font-Name="Verdana" CellPadding="4"
Font-Size="10pt" AutoGenerateColumns="False">
<HeaderStyle BackColor="Black" ForeColor="White"
Font-Bold="True" HorizontalAlign="Center" />
<AlternatingItemStyle BackColor="White" />

<Columns>
<asp:BoundColumn DataField="CatName" HeaderText="Category Name" />
<asp:BoundColumn DataField="Description" HeaderText="FAQ Description" />
<asp:BoundColumn DataField="ViewCount" DataFormatString="{0:#,###}"
HeaderText="Views" ItemStyle-HorizontalAlign="Center" />
<asp:BoundColumn DataField="SubmittedByName" HeaderText="Author" />
<asp:BoundColumn DataField="SubmittedByEmail" HeaderText="Author's Email" />
<asp:BoundColumn DataField="DateEntered" HeaderText="Date Added"
DataFormatString="{0:MM-dd-yyyy}" />
</Columns>
</asp:datagrid>
實(shí)際運(yùn)行結(jié)果如下:

Category Name
FAQ Description

Views
Date Added

Getting Started
Where can I host my ASP Web site for free (similar to GeoCities or Tripod or any of the many other free Web site sites)?

161,316
03-20-2001

ASP.NET
How can I format numbers and date/times using ASP.NET? For example, I want to format a number as a currency.

124,391
01-19-2002

Databases, Errors
I am using Access and getting a 80004005 error (or a [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot open the file '(unknown)' error) when trying to open a connection! How can I fix this problem?

108,374
01-17-2001








如上例所示,上述代碼指定了需要顯示的特定列并且應(yīng)用了特定的格式。請注意DataFormateString看上去很有趣。它的格式始終是{0:format string}。{0: …}指定通過格式化字符串(由…指定的)來格式化第一個(gè)參數(shù)(第一個(gè)參數(shù)指由DataReader返回的那個(gè)特定列的值)。在示例中我使用了格式化字符串#,###,它在每3個(gè)數(shù)字前加上一個(gè)逗號;格式化字符串MM-dd-yyyy指定通過月、日和年的格式顯示日期/時(shí)間字段。

結(jié)論

花一些時(shí)間看一下第一個(gè)示例(見DataGrid Web控件深度歷險(xiǎn)(1))和現(xiàn)在的示例。改進(jìn)確實(shí)很大!請注意所有這些樣式和用戶界面的改進(jìn)不需要寫一行代碼就可實(shí)現(xiàn)。我們只是在Web控件的標(biāo)記中設(shè)定了一些屬性!事實(shí)上如果你正在使用類似Visual Studio .Net的編輯器, 你可通過點(diǎn)擊一些按鈕、選中一些復(fù)選框、選擇列表框的一些項(xiàng)來設(shè)定格式化選項(xiàng)。想象一下在傳統(tǒng)ASP中實(shí)現(xiàn)同樣效果需要編寫的那些冗長代碼,那會(huì)使你愛上ASP.Net,如果你現(xiàn)在還沒有的話。