首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
goodboy1881 (13)
wangchinaking (58)
iiprogram (67)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
coofucoo (105)
Drate (69)
lphpc (30)
smallnest (61)
CSDN - 文档中心 - .NET 阅读:9215   评论: 10    参与评论
标题   DataGrid Web控件深度历险(2) Part2     选择自 chinapro 的 Blog
关键字   DataGrid
出处   http://aspnet.4guysfromrolla.com/articles/041702-1.2.aspx

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

设定哪些列应该显示

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

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

<asp:DataGrid runat="server" AutoGenerateColumns="False">
  <Columns>
    <asp:BoundColumn DataField="DatabaseColumnName1" ... />
    <asp:BoundColumn DataField="DatabaseColumnName2" ... />
    ...
    <asp:BoundColumn DataField="DatabaseColumnNameN" ... />
  </Columns>
</asp:datagrid>

对于每一个希望显示的列,需要通过一个包含DataField属性的<asp:BoundColumn ... />标记来指定数据库中需要显示的列。所有这些BoundColumn标记必须包含在Column标记内。(也可通过编程的方式指定这些绑定列,但是它的可读性差,并且需要很多代码!)请注意只有通过BoundColumn标记指定的列才会在DataGrid中显示,你必须指定需要显示的列!

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

l        HeaderText 设定列标题的文字。

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

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

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

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

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

实际运行结果如下:

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,如果你现在还没有的话。

祝编程愉快!


相关文章
对该文的评论
bljbljbljblj ( 2004-05-08)
别吵了
少吵几句你们会死啊
zsucc ( 2004-04-13)
刚刚粗略看了3。
就目前(3),甚至(4)(3的最后有关4的概略),这篇文章还是不能叫“深度”。
当然,这只是针对前三章而言的。或许5会让我改观。我还是期待这篇文章能真的做到“深度”,而不仅仅作为“实用”的文章,从这个角度上来说.NET的技术文档还更好用。
zsucc ( 2004-04-13)
To Miracle:
如果我写一篇ASP入门的文章,就讲诸如Response.Write之类的内容,取名为ASP技术内幕,不知你看了是什么感想?
就(2)涉及的内容来说,只要了解过ASP.NET的人都会有所涉及,而不是你所说的“高境界”才会的。
还有,我的意思是对文章是否就此结束抱有疑问,而非讥嘲。为这句话你这样回复也不见得你有多自重。
Miracle ( 2004-04-07)
zsucc kuibobo yong_xiu诸位仁兄,可能你们已经达到了令人望尘莫及的所谓“高境界”,不过你们也没有理由对一篇实用的技术文章加以讥嘲。自重吧。
yong_xiu ( 2004-03-31)
何谓深度!!!!!!!!!!!!1111