Получение флажка из таблицы с привязкой к данным - PullRequest
1 голос
/ 11 ноября 2011

Есть ли способ узнать, проверено ли поле Checkbox в виде сетки с привязкой к данным в ASP.NET? Я могу получить все другие значения ячеек в цикле foreach с помощью cell.Text. Так как он связан с данными (для ObjectDataSource), столбцы и ячейки не имеют явно установленных идентификаторов, и я не могу найти свойство, которое позволило бы мне знать, что ячейка содержит флажок или просто текст. Все ячейки имеют тип DataControlFieldCell, поэтому я не могу проверить на основе типа либо. Мысли

РЕДАКТИРОВАТЬ:

foreach (GridViewRow row in report_gv.Rows)
{
   data += "<TR>";
   foreach (TableCell cell in row.Cells)
   {
      data += "<TD>" + cell.Text + "</TD>";
      //If this is a checkbox (bit value from the DB) cell.Text isn't going to return anything
   }
   data += "</TR>";
}

Ответы [ 4 ]

1 голос
/ 11 ноября 2011
foreach (GridViewRow row in myGridView) {
  foreach (TableCell cell in row.Cells) {
    foreach (Control ctrl in cell.Controls) {
      if (ctrl is CheckBox) {
        CheckBox cb = (CheckBox)ctrl;
        // use cb
      } else if (cell is TextBox) {
      } else if (cell is Label) {
      }
    }
  }
}

Вы можете расширить это для обработки, как вам нужно.

0 голосов
/ 11 ноября 2011

В GridView.RowDataBound Событие, к которому вы можете получить доступ к каждому checkbox, который находится внутри каждой строки.Попробуйте что-то вроде этого

<ItemTemplate>
<asp:CheckBoxList ID="chb1" runat="server">
</ItemTemplate>

protected void GvRowDataBound(object sender, GridViewRowEventArgs e)
{
            var chb = (CheckBox) e.Row.FindControl("chb1");
            var ischeck = false;
            if(chb != null)
            {
                if(chb.Checked)
                {
                    ischeck = true;
                }
            }
}
0 голосов
/ 11 ноября 2011

вы можете использовать FindControl в GridViewItem и выполнять поиск по идентификатору флажка, как у вас в определении ItemTemplate.

Есть множество примеров по FindControl GridView там

например, проверьте это: checkBox в gridView

0 голосов
/ 11 ноября 2011

Вы можете сделать это. Но проще конвертировать в <TemplateField>, что позволит вам присвоить идентификатор вашему CheckBox. Тогда ваш foreach идет:

foreach (GridViewRow row in myGridView) {
  CheckBox myCB = (CheckBox)row.FindControl("gvIdentifier");

  // Do something with myCB
}
...