C# usercontrol LinkButton CommandArgument пустым после подзаголовка сетки
У меня есть asp:Gridview
отображает количество времени, которое сотрудник тратит на проект, и их комментарии. Я хочу сделать дату подзаголовком в сетке, чтобы она не отображалась на каждой строке сетки. Сетка не может быть отсортирована. Сетка находится в пользовательском контроле, который находится в другом пользовательском контроле. Столбцы из запроса к базе данных:
- Дата
- Идентификатор проекта
- Название проекта / код
- Комментарий персонала
- Время потрачено
Вид сетки определяется как:
<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()));
}
}
Я нашел пару примеров людей с такой же проблемой, но без реальных ответов.