DataGrid Web控件深度历险(2) Part2

在本文的第一部分,我们研究了如何设定 DataGrid Web 控件的显示属性以及如何通过样式设定 DataGrid 的页眉、页脚、行和交替行的显示。所有这些技术或是用于设定 整个 DataGrid 的显示,或是用于设定 DataGrid 中行的显示。但是如何设定 DataGrid 中列的显示属性?其实并不难,接着读你就知道了。

** 设定哪些列应该显示 ** ** **

缺省情况下 DataGrid 在生成的 HTML 表格中为 SQL 查询返回的每一列生成一个对应的列。但是在一些情况下仅希望在 DataGrid 中显示这些列中的一部分列。例如,在我正在进行的示例中,通过调用 sp_Popularity 存储过程显示了 ASPFAQs.com 最受欢迎的 10 个问题。它包含 FAQID 列,或许我并不希望显示该列。

如果不想在 DataGrid 中显示数据库查询返回的所有列,必须显式地声明所有希望显示的列。第一步是将 DataGrid 的 AutoGenerateColumns 属性设为 False 。一旦执行完这个操作,就需要通过 BoundColumn Web 控件设定需显示的列,如下所示:

 1<asp:datagrid autogeneratecolumns="False" runat="server">  
 2    
 3      <columns>  
 4    
 5        <asp:boundcolumn ...="" datafield="DatabaseColumnName1"></asp:boundcolumn>  
 6    
 7        <asp:boundcolumn ...="" datafield="DatabaseColumnName2"></asp:boundcolumn>  
 8    
 9        ...  
10    
11        <asp:boundcolumn ...="" datafield="DatabaseColumnNameN"></asp:boundcolumn>  
12    
13      </columns>
14</asp:datagrid>

对于每一个希望显示的列,需要通过一个包含 DataField 属性的 `

1<asp:boundcolumn ...=""></asp:boundcolumn>

标记来指定数据库中需要显示的列。所有这些 ` BoundColumn 标记必须包含在 Column 标记内。 ( 也可通过编程的方式指定这些绑定列,但是它的可读性差,并且需要很多代码 !) 请注意只有通过 BoundColumn 标记指定的列才会在 DataGrid 中显示,你必须指定需要显示的列 !

BoundColumn 控件的优点在于它包含一些设定格式的属性,包括:

l HeaderText — 设定列标题的文字。

l FooterText — 设定列尾的文字 ( 记住若要在 DataGrid 中显示页脚,应将 ShowFooter 设为 True) 。

l HeaderStyle/FooterStyle/ItemStyle — 包含与 DataGrid 样式相同的属性。对设定列居中、前景色、背景色等很有用。

l DataFormatString — 设置格式命令。 ( 参考下面的示例;参考文档以获得全部的格式化规范 )

让我们看一下如何通过使用 BoundColumn 标记来进一步增强前面的示例。正如前面所提到的,我们 不想 显示 FAQID 或 FAQCategoryID 列,并且我们希望对数字列 (ViewCount) 和日期 / 时间列 (DateEntered) 设定格式。另外,我们希望数字列的值居中。这些均可通过几行易于阅读易于理解的代码完成:

 1<asp:datagrid autogeneratecolumns="False" backcolor="#eeeeee" cellpadding="4" font-name="Verdana" font-size="10pt" horizontalalign="Center" id="dgPopularFAQs" runat="server" width="85%">  
 2    
 3      <headerstyle backcolor="Black" font-bold="True" forecolor="White" horizontalalign="Center"></headerstyle>  
 4    
 5      <alternatingitemstyle backcolor="White"></alternatingitemstyle>  
 6    
 7                       
 8    
 9      <columns>  
10    
11        <asp:boundcolumn datafield="CatName" headertext="Category Name"></asp:boundcolumn>  
12    
13        <asp:boundcolumn datafield="Description" headertext="FAQ Description"></asp:boundcolumn>  
14    
15        <asp:boundcolumn datafield="ViewCount" dataformatstring="{0:#,###}" headertext="Views" itemstyle-horizontalalign="Center"></asp:boundcolumn>  
16    
17        <asp:boundcolumn datafield="SubmittedByName" headertext="Author"></asp:boundcolumn>  
18    
19        <asp:boundcolumn datafield="SubmittedByEmail" headertext="Author's Email"></asp:boundcolumn>  
20    
21        <asp:boundcolumn datafield="DateEntered" dataformatstring="{0:MM-dd-yyyy}" headertext="Date Added"></asp:boundcolumn>      
22    
23      </columns>
24</asp:datagrid>

实际运行结果如下:

** 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

|

|

|

|

如上例所示,上述代码指定了需要显示的特定列并且应用了特定的格式。请注意 DataFormateString 看上去很有趣。它的格式始终是 {0: format string } 。 {0: …} 指定通过格式化字符串 ( 由 … 指定的 ) 来格式化第一个参数 ( 第一个参数指由 DataReader 返回的那个特定列的值 ) 。在示例中我使用了格式化字符串 #,### ,它在每 3 个数字前加上一个逗号;格式化字符串 MM-dd-yyyy 指定通过月、日和年的格式显示日期 / 时间字段。

** 结论 ** ** **

花一些时间看一下第一个示例 ( 见 ** DataGrid Web ** ** 控件深度历险 ** ** (1) ** ) 和现在的示例。改进确实很大 ! 请注意所有这些样式和用户界面的改进不需要写一行代码就可实现。我们只是在 Web 控件的标记中设定了一些属性!事实上如果你正在使用类似 Visual Studio .Net 的编辑器, 你可通过点击一些按钮、选中一些复选框、选择列表框的一些项来设定格式化选项。想象一下在传统 ASP 中实现同样效果需要编写的那些冗长代码,那会使你爱上 ASP.Net ,如果你现在还没有的话。

祝编程愉快 !

Published At
Categories with Web编程
Tagged with
comments powered by Disqus