修改ASP.NET DataGrid的样式
创始人
2024-04-26 19:41:42
0次
ASP.NET DataGrid的样式

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

汇总行是 DataGrid 行,同样,它的类型可以是 Item 或 AlternatingItem。因此,在编写 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;      
  7. } 

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的样式:具有修改后的自定义布局的汇总行

此处需要考虑的重要一点是,Item 和 AlternatingItem 行均为绑定行。它们的明确文本只是在 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的部分常用操作

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...