перебрать ВСЕ строки в GridView - PullRequest
4 голосов
/ 20 июля 2011
 <asp:TemplateField HeaderText="Select">
 <ItemTemplate>
 <asp:CheckBox ID="chkSelected" runat="server" Checked="false"></asp:CheckBox>
  </ItemTemplate>
 </asp:TemplateField>

elow-код работает нормально, но есть ошибка:

, если объект Employee возвращает 5 строк, и я пытаюсь установить флажок на основе идентификаторов, но вместо этого он просто соответствует только последнемуid - предполагается, что проверено все 5 строк ..

List<Employee> result = new List<Employee>();
long Id = (long)Session["Id"];
result = Employee.GetEmployeeById(Id);

foreach (GridViewRow row in gv.Rows)
{
   CheckBox chkBox = row.FindControl("chkSelected") as CheckBox;
   if (c != null)
   {
      if (result.Count > 0)
      {
          foreach (Employee item in result)
          {
             Label Id = row.FindControl("lblId") as Label;
             if (Id.Text == item.Id.ToString())
             {
                 chkBox.Checked = true;
             }
             else
             {
                chkBox.Checked = false;
             }
           }
       }

1 Ответ

5 голосов
/ 20 июля 2011

Посмотрите на свою логику - у вас есть только один флажок.Вы снимаете флажок и проверяете тот же элемент управления в цикле сотрудника.Есть ли в каждой строке сетки флажок, который следует выбирать в зависимости от того, существует ли идентификатор в списке сотрудников?

 foreach (GridViewRow row in gv.Rows)
    {
        Label Id = row.FindControl("lblId") as Label;
        var result = Employee.GetEmployeeById(Id.Text);
        if (result.Count > 0)
        {
            CheckBox chkBox = row.FindControl("chkSelected") as CheckBox;
            if (chkBox != null)
            {
                chkBox.Checked = result.Any(x => x.Id.ToString() == Id.Text);

            }
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...