0

我正在使用gridview,我想将特定行的颜色更改为网格视图,这就是为什么我必须在 rowdatabound 事件中找到行。我如何找到行?

源代码:

protected void Page_Load(object sender, EventArgs e)
{
    string[] arr={"1","2","3","4"};
    GridView1.DataSource = arr;
    GridView1.DataBind();
}
protected void pagechangin(object sender, GridViewPageEventArgs e) {
    GridView1.PageIndex = e.NewPageIndex;
}
protected void databound(Object sender, GridViewRowEventArgs e) {
    GridViewRow grv=GridView1.Rows[0];
}
4

2 回答 2

2

您必须注册一个事件处理程序来处理事件。但是您没有向我们展示 aspx 标记,因此您可能错过了以声明方式添加处理程序:

<asp:gridview id="GridView1" 
    onrowdatabound="GridView1_RowDataBound" 
    runat="server">
  </asp:gridview>

void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
         // e.Row is the GridViewRow
         e.Row.BackColor = System.Drawing.Color.Green;
    }
}

更新原因IndexOutOfRangeException是您在创建第一行之前正在访问它:

GridViewRow grv=GridView1.Rows[0];

这是一个讨厌的。RowDataBound被要求为每个GridViewRow,不仅为 ,DataItems而且为Header,FooterPager。将创建的第一个是Header. 但只GridView.Rows返回= 。因此,您试图在创建行期间访问第一个“数据行” 。GridViewRowsRowTypeDataRowheader

要修复它,请使用上面的代码并检查RowType.

if(e.Row.RowType == DataControlRowType.DataRow)
{
    // now you ca safely access the first row in this way, 
    // altghough i assume that you should use my code above 
    // to set the color of every GridViewRow
    GridViewRow grv=GridView1.Rows[0]; 

除此之外,您还应该使用 Dragan 提到DataBind的网格(默认)。if(!IsPostBack)ViewState

于 2013-02-11T13:38:53.660 回答
1

您的 page_load 事件处理程序不正确。您不应该在每次页面加载时加载数据,而应仅在初始加载时加载。也许这会引起问题。

在您的 Page_Load 方法中尝试此操作

if (!Page.IsPostback)
{
    //copy your code from above
} 
于 2013-02-11T13:50:14.833 回答