2

我有一个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()));
     }
 }

我发现了几个有同样问题的人的例子,但没有真正的答案。

4

0 回答 0