在本文的第一部分,我们研究了如何设定 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 ,如果你现在还没有的话。
祝编程愉快 !