C# usercontrol LinkButton CommandArgument пустым после подзаголовка сетки

У меня есть asp:Gridview отображает количество времени, которое сотрудник тратит на проект, и их комментарии. Я хочу сделать дату подзаголовком в сетке, чтобы она не отображалась на каждой строке сетки. Сетка не может быть отсортирована. Сетка находится в пользовательском контроле, который находится в другом пользовательском контроле. Столбцы из запроса к базе данных:

  1. Дата
  2. Идентификатор проекта
  3. Название проекта / код
  4. Комментарий персонала
  5. Время потрачено

Вид сетки определяется как:

  <asp:GridView ID="grdTimeSheet" 
      runat="server" 
      AutoGenerateColumns="False" 
      CssClass="mGrid" 
      AllowPaging="false" 
      AllowSorting="false" 
      BorderStyle="None" 
      GridLines="None" 
      DataKeyNames="ItemID" 
      CaptionAlign="Top" 
      CellPadding="1" 
      CellSpacing="1" 
      ShowFooter="True" 
      OnRowDataBound="grdTimeSheet_RowDataBound" 
      Width="100%" 
      OnRowCommand="grdTimeSheet_OnRowCommand" >

В GridView у меня есть кнопка ссылки:

<asp:LinkButton 
      ID="ItemLinkButton" 
      runat="server" 
      CommandArgument='<%# Eval("ID") %>' 
      CommandName="Select"  Text='<%# Eval("ProjectNo") %>'  >
 </asp:LinkButton>

OnRowDataBound Событие в коде позади проверяет, изменилась ли дата в записи, и если да, добавляет новую строку в сетку для отображения даты. Этот процесс отображается нормально.

OnRowCommand проверяет CommandName значение и если оно равно Select Я получаю идентификатор проекта из CommandArgument, Это прекрасно работает для всех строк, кроме той, которая находится непосредственно под подзаголовком даты.

Я использовал следующий код для создания подзаголовка:

            Table tbl = e.Row.Parent as Table;
            if (tbl != null)
            {
                GridViewRow row = 
                   new GridViewRow(
                      0, 
                      0, 
                      DataControlRowType.DataRow, 
                      DataControlRowState.Normal);

                TableCell cell = new TableCell();
                cell.ColumnSpan = this.grdTimeSheet.Columns.Count;
                cell.Width = Unit.Percentage(100);
                cell.Style.Add("font-weight", "bold");
                cell.Style.Add("color", "black");
                HtmlGenericControl span = new HtmlGenericControl("span");
                span.InnerHtml = currentDate;
                cell.Controls.Add(span);
                row.Cells.Add(cell);
                tbl.Rows.AddAt(tbl.Rows.Count - 1, row);
            }

Проблема заключается в CommandArgument возвращается пустым для первой записи под подзаголовком. Все остальные ссылки в порядке. Если я избавлюсь от подзаголовков, все будет хорошо.

 protected void grdTimeSheet_OnRowCommand(
           object sender, GridViewCommandEventArgs e)
 {
     if (e.CommandName == "Select")
     {
         selectedItemEvent(int.Parse(e.CommandArgument.ToString()));
     }
 }

Я нашел пару примеров людей с такой же проблемой, но без реальных ответов.

0 ответов

Другие вопросы по тегам