Как изменить цвет фона строки в GridView, если установлен флажок в строке? - PullRequest
1 голос
/ 05 декабря 2011

Я хотел бы изменить цвет фона всех строк со значением для «активного» столбца, не отмеченного в GridView. Я попробовал следующий способ, но он не работает:

 protected void GdvDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
    CheckBox chkItem = null;
    foreach (GridViewRow grRow in GdvDetails.Rows)
    {
        if (grRow.RowType == DataControlRowType.DataRow)
        {
            chkItem = (CheckBox)grRow.Cells[6].FindControl("active");

            if (chkItem.Checked )
            {
                grRow.BackColor = Color.Red;
            }

        }
    }
}

Сообщение об ошибке: «Ссылка на объект не установлена ​​на экземпляр объекта.»

Ответы [ 3 ]

2 голосов
/ 05 декабря 2011

Ваш код не работает, потому что вам нужно сделать это на RowDataBund

protected void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{

    if(e.Row.RowType == DataControlRowType.DataRow)
    {
      //Paste your code here.

    }

}

И добавьте обработчик для RowDataBound следующим образом:

<asp:gridview id="CustomersGridView" 

        allowpaging="true"
        onrowdatabound="CustomersGridView_RowDataBound" 
        runat="server">
      </asp:gridview>
0 голосов
/ 06 декабря 2011

Так это РАБОТАЕТ:)

 protected void GdvDetails_DataBound(object sender, EventArgs e)
    {
        CheckBox chkItem = null;
        foreach (GridViewRow grRow in GdvDetails.Rows)
        {
            if (grRow.RowType == DataControlRowType.DataRow)
            {
                chkItem = (CheckBox)grRow.Cells[6].FindControl("CkbActive");
                bool bl = chkItem.Checked;
                if (bl == false)
                {
                  grRow.BackColor = Color.LightGray;
                }
            }
        }
    }

И файл aspx имеет

 <asp:TemplateField>
                <ItemTemplate>
                <asp:CheckBox ID= "CkbActive" Checked ='<%# Bind ("active") %>' Enabled="false" runat="server"/>
                </ItemTemplate>
                </asp:TemplateField>

в GridView GdvDetails.

Я не использовал код в onrowdatabound, потому что это событие для каждой строки, и я думал, что он будет повторяться без необходимости. И это работает ... на всякий случай, если кто-то еще шарит как я? !! спасибо за помощь

0 голосов
/ 05 декабря 2011

Вам нужно обработать событие RowDataBound вместо события DataBound, поэтому поместите вас в событие RowDataBound, как показано ниже:

На странице aspx после добавления события код будет выглядеть так:

<asp:gridview id="GdvDetails" 
    onrowdatabound="GdvDetails_RowDataBound" 
    runat="server">
 </asp:gridview>

В коде (.cs):

protected void GdvDetails_RowDataBoundd(object sender, GridViewRowEventArgs e)
{   
  if(e.Row.RowType == DataControlRowType.DataRow)
  { 
     CheckBox chkItem = (CheckBox)e.Row.FindControl("active");
     if (chkItem.Checked)
     {
         GdvDetails.SelectedRow.BackColor = Color.LightGray;
     }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...