修改ASP.NET DataGrid的样式

开发 后端
本文介绍如何修改ASP.NET DataGrid的样式。DataGrid 允许您修改成分单元格的样式和布局,这可通过挂钩ItemCreated 事件来完成。
ASP.NET DataGrid的样式

ASP.NET DataGrid 允许您修改成分单元格的样式和布局,这可通过挂钩 ItemCreated 事件来完成。该控件每次处理子项(页眉、页脚、行、页导航)时,该事件都会被激发。事件处理程序接收类型为 DataGridItemEventArgs 的参数,您可以从该参数提取所处理项目的类型。

汇总行是 DataGrid 行,同样,它的类型可以是 ItemAlternatingItem。因此,在编写 ItemCreated 处理程序时,要确保只有在该项的类型正确时才处理相应的单元格。下面的列表概述所需的代码。

  1. public void ItemCreated(Object sender, DataGridItemEventArgs e)  
  2. {  
  3.     // Get the type of the newly created item  
  4.     ListItemType itemType = e.Item.ItemType;  
  5.     if (itemType == ListItemType.Item ||   
  6.     itemType == ListItemType.AlternatingItem)   
  7.     {  
  8.         // Get the data bound to the current row  
  9.         DataRowView drv = (DataRowView) e.Item.DataItem;  
  10.     if (drv != null)  
  11.     {  
  12.         // Check here the app-specific way to detect whether the   
  13.         // current row is a summary row  
  14.         :  
  15.     }  
  16.     }  
  17. }  

如果所创建的项是 DataGrid 项(或交替项),则可以通过 DataItem 属性访问绑定到行的数据。根据 DataGrid 绑定到的对象的类型,DataItem 属性会指向不同的行对象。如果网格绑定到 DataView,会获取 DataRowView 对象;如果该源用 DataTable 对象来表示,会获取 DataRow 对象。在该示例应用程序中,我使用 DataView 对象填充了网格。后来,单行的数据对象成为 DataRowView 对象。

在拥有了数据行对象之后,可以应用一些应用程序特定的规则来确定该行是否为汇总行。在该示例应用程序中,汇总行的 MyOrderID 字段设置为 –1。

  1. if ((int) drv["MyOrderID"] == -1)  
  2. {  
  3.    // Modify style and layout here.   
  4.    //    --> Set the background color to white and use bold font  
  5.    e.Item.BackColor = Color.White;   
  6. e.Item.Font.Bold = true;      

DataGrid 现在看上去如下图所示。

以粗体显示且背景为白色的汇总行

DataGrid的样式:以粗体显示且背景为白色的汇总行

DataGrid 行实际上只是表中的一行。同样,使用它可以很好地进行单元格删除以及其他调整。让我们看一看如何使用跨越所有现有列的单一单元格来呈现汇总行。

  1. if ((int) drv["MyOrderID"] == -1) 

具有自定义布局的汇总行

DataGrid的样式:具有自定义布局的汇总行

在这三个原始单元格中,前两个被删除,第三个(现在包含索引 0)被正确对齐并跨越外部表的宽度。如果您希望在汇总行上显示一些自定义文本,则需要做好面对其他问题的准备。

假设您需要添加一些文本以对小计进行注释,而且与此同时,让小计与单个定单量出现在同一列中。在这种情况下,只需删除一个单元格。

  1. e.Item.Cells.RemoveAt(1);         // remove the order # cell  
  2. e.Item.Cells[0].ColumnSpan = 2;      // span the custID cell  
  3. e.Item.Cells[1].HorizontalAlign = HorizontalAlign.Right;  
  4. e.Item.Cells[0].Text = "Total is"

此代码的结果如下所示。正如您所看到的那样,它与您的预期结果不完全相同。汇总行的第一个单元格中并没有您刚刚设置的文本。这是怎么回事呢?

具有修改后的自定义布局的汇总行

DataGrid的样式:具有修改后的自定义布局的汇总行

此处需要考虑的重要一点是,ItemAlternatingItem 行均为绑定行。它们的明确文本只是在 OnItemDataBound 事件的过程中设置。您可能已经猜到了,OnItemDataBound 事件会在创建该项之后激发。因此,在处理 ItemCreated 时分配给单元格的任何文本在后来都由某个事件以静默方式改写。可通过设置 DataGrid 的 OnItemDataBound 属性来挂钩 OnItemDataBound 事件。

  1. < asp:DataGrid id="grid" runat="server"   
  2. AutoGenerateColumns="false" 
  3. :  
  4. OnItemCreated="ItemCreated" 
  5. OnItemDataBound="ItemDataBound" 
  6. OnPageIndexChanged="PageIndexChanged"> 
  7. The structure of the code for   
  8.                                                                                                                                                                                                                     ItemDataBound is shown below.  
  9. public void ItemDataBound(Object sender, DataGridItemEventArgs e)  
  10. {  
  11. DataRowView drv = (DataRowView) e.Item.DataItem;  
  12. if (drv == null)  
  13.     return;  
  14.  
  15. if ((int) drv["MyOrderID"] == -1)  
  16. {  
  17. if (drv["MyCustomerID"].ToString() == "(Total)")  
  18. {  
  19.     e.Item.BackColor = Color.Yellow;  
  20.     e.Item.Cells[0].Text = "Orders total";  
  21. }  
  22. else  
  23.     e.Item.Cells[0].Text = "Customer subtotal";  
  24. }  
  25. }  

最上面的一行是在黄色背景上绘制的,它显示其他汇总行中的另一个文本。最终的 DataGrid 显示如下。

最终的 DataGrid

DataGrid的样式:最终的 DataGrid

以应用程序特定的剂量很好地混合 SQL 代码和 ASP.NET 技术可以实现有效的 Web 数据库应用程序。DataGrid 控件是一个前沿工具,可用来为它所提供的编程功能构建完美而又功能强大的 Web 应用程序,而且对于它所支持的自定义级别来说用途更多。

【编辑推荐】

  1. ASP.NET DataGrid控件数据分组操作
  2. 什么是ASP.NET DataGrid控件:完全模板化的网格
  3. ASP.NET的GridView与DataGrid控件比较浅析
  4. .NET新手指南:轻松自定义DataGridView控件
  5. C#中对DatagridView的部分常用操作
责任编辑:yangsai 来源: MSDN
相关推荐

2009-08-07 17:42:43

ASP.NET Dat

2009-08-03 18:29:31

GridView与Da

2009-08-12 14:38:05

ASP.NET Dat

2009-08-07 17:31:26

ASP.NET Dat

2009-07-22 17:45:35

ASP.NET教程

2009-08-04 13:35:16

ASP.NET自定义样

2009-07-28 17:17:19

ASP.NET概述

2009-08-03 14:22:33

什么是ASP.NET

2009-08-07 18:04:22

ASP.NET Dat确认对话框

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入门教程

2009-07-29 16:33:28

GreeterLogiASP.NET

2009-07-27 10:35:33

TypeConvertASP.NET

2009-07-27 15:48:43

2009-07-29 14:52:12

IScriptContASP.NET

2009-07-29 11:19:03

JavaScriptASP.NET

2009-07-29 16:08:07

ASP和ASP.NET

2009-08-10 13:32:15

ASP.NET TimASP.NET组件设计

2009-07-22 18:03:00

ASP.NET ASP

2009-07-29 17:29:46

ASP与ASP.NET

2009-08-03 13:38:18

ASP.NET编程模型
点赞
收藏

51CTO技术栈公众号