C#usercontrol LinkBut​​ton CommandArgument在网格子标题后为空

时间:2014-07-29 16:11:25

标签: c# asp.net gridview asplinkbutton commandargument

我有一个asp:Gridview,显示了工作人员在项目上花费的时间和他们的意见。我希望将日期作为网格中的子标题,因此它不会显示在网格的每一行上。网格无法排序。网格位于usercontol中,该usercontol位于另一个usercontrol中。数据库查询中的列是:

  1. 日期
  2. 项目ID
  3. 项目名称/代码
  4. 员工评论
  5. 花费的时间
  6. 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()));
         }
     }
    

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

0 个答案:

没有答案