2017-02-10 2 views
0

Моим приложением является ASP.Net, C#, Webforms. У меня есть Gridview - по имени gvCustNames У меня есть GridView набор для запуска кода на OnDataBound="setRowColor"Получение значения CheckBox в Databound, а затем установка цвета строки GridView, если он установлен

Вот мой C# синтаксис:

protected void setRowColor(object sender, GridViewRowEventArgs e) 
    { 
     foreach (GridViewRow row in gvCustNames.Rows) 
     { 
      CheckBox chkRow = (row.Cells[3].FindControl("cbViewCutsomer") as CheckBox); 
      if (chkRow.Checked) 
      { 
       e.Row.BackColor = System.Drawing.Color.PaleGreen; 
      } 
     } 
    } 

приложение компилируется нормально без ошибок, но при попытке его просмотра в в браузере я получаю эту ошибку:

A method or delegate sbmanager.cm.setRowColor(object, System.Web.UI.WebControls.GridViewRowEventArgs)' parameters do not match delegate System.EventHandler(object, System.EventArgs)' parameters

Это означает, что я не использую правильный обработчик событий. Какой обработчик я должен использовать?

+0

не по ошибке, вы должны использовать '' 'защищен недействительным setRowColor (объект отправителя, EventArgs е)' '' – trebor

ответ

2

Вы обрабатываете OnDataBound, который вызывается как только весь процесс связывания данных GridView завершен. Это действительно ожидает аргумент EventArgs. Вот почему ошибка. Теперь у вас есть два варианта:

  1. Простой. Замените GridViewRowEventArgs на EventArgs. Не забудьте также изменить e.Row на row.

  2. Наверное, яснее. Вы все равно бегаете по всем строкам, поэтому почему бы не обработать OnRowDataBound? Args остаются теми же, и нет необходимости в цикле:

    protected void setRowColor(object sender, GridViewRowEventArgs e) 
    { 
        CheckBox chkRow = (e.Row.Cells[3].FindControl("cbViewCutsomer") as CheckBox); 
        if (chkRow != null && chkRow.Checked) 
        { 
         e.Row.BackColor = System.Drawing.Color.PaleGreen; 
        } 
    } 
    
Смежные вопросы