我有一个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()));
}
}
我发现了几个有同样问题的人的例子,但没有真正的答案。