我有一个asp:Gridview
,显示了工作人员在项目上花费的时间和他们的意见。我希望将日期作为网格中的子标题,因此它不会显示在网格的每一行上。网格无法排序。网格位于usercontol中,该usercontol位于另一个usercontrol中。数据库查询中的列是:
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
检索项目ID。除了直接位于日期子标题下的行之外,这适用于所有行。
我使用以下代码创建子标题:
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()));
}
}
我找到了几个有同样问题的人的例子,但没有真正的答案。