当前位置:编程学习 > C#/ASP.NET >>

GridView根据值的变化改变行列样式

答案:     我看到论坛中有询问关于如何在GridView随某行某列值的改变时(这些值是空的或不是空的或是其它某些值等),其背景色及文本颜色也随之改变。这篇文章便论述这个问题。
  
    根据某列的值改变其样式最好的方法是在GridView的DataRowBound事件中想办法。在GridView中的行绑定数据后将立即执行DataRowBound事件。DataRowBound事件使用GridViewRowEventargs类作为事件变量。通过事件变量你能够利用GridViewRowEventArgs属性操作已经绑定数据的行。
  
  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  {
   GridViewRow row = e.Row;
  }
  
    Row将返回TableRow类中的一个GridViewRow对象。
  
    绑定的Row有几种不同的类型。例如:DataRow, EmptyDataRow, Footer, Header, Pager 和 Separator。通过GridView的RowType属性可以得到当前行的行类型。RowType是一组DataControlRow枚举。
  
    看下面的代码示例,检测GridView列出的行是否为一个标准类型的行。
  
  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  {
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
    //Do something!
   }
  }
  
    可以使用Row的Cells属性得到其Cells,它将返回一个TableCellCollection对象。然后通过TableCellCollection索引得到特定的Cells。TableCellcollection索引将返回一个TabelCell对象,对应于Row中的一个Cell:
  
  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  {
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
    string value = e.Row.Cells[0].Text;
   }
  }
  
    现在你已经明白了如何得到GridView中某行某列的值,那么根据值的变化改变其样式就比较容易了。以下示例使用 Northwind 数据库,通过检测第四列(UnitPrice)的值是否大于10将其颜色改变为红色。
  
  <%@ Page Language="C#"%>
  <%@ Import Namespace="System.Drawing" %>
  
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  
  <script runat="server">
  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  {
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
    if (Decimal.Parse(e.Row.Cells[3].Text) > 10)
     e.Row.Cells[3].BackColor = Color.Red;
   }
  }
  
  </script>
  <html XMLns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
  <title>Untitled Page</title>
  </head>
  <body>
   <form id="form1" runat="server">
   <div>
    <ASP:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False"
  DataKeyNames="ProductID" OnRowDataBound="GridView1_RowDataBound">
    <Columns>
     <asp:BoundField ReadOnly="True" HeaderText="ProductID" InsertVisible="False" DataField="ProductID"
  SortExpression="ProductID" />
     <asp:BoundField HeaderText="ProductName" DataField="ProductName" SortExpression="ProductName" />
     <asp:BoundField HeaderText="QuantityPerUnit" DataField="QuantityPerUnit" SortExpression="QuantityPerUnit" />
     <asp:BoundField HeaderText="UnitPrice" DataField="UnitPrice" SortExpression="UnitPrice" />
    </Columns>
   </asp:GridView>
  <asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="SELECT [ProductID], [ProductName], [QuantityPerUnit], [UnitPrice] FROM [Alphabetical list of products]"
  
  ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>" />
  
  </div>
  </form>
  </body>
  </html>
  
  

上一个:调试ASP.NET应用程序的方法和技巧(1)
下一个:ASP.NET 2.0中WEB应用程序的部署(2)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,