top
Loading...
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>
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗