C# 将标题行添加到gridview赢得';不允许您保存最后一个项目行

C# 将标题行添加到gridview赢得';不允许您保存最后一个项目行,c#,asp.net,gridview,C#,Asp.net,Gridview,我已经修改了我的GridView,使其有一个额外的标题行,但是该额外的行导致我的grid view行数不正确 基本上,当我现在想保存Gridview时,它无法识别最后一行项目。 在我当前的测试中,我有5个项目行,但是只有4个项目行被保存 用于创建附加标题行的我的代码: protected void gvStatusReport_RowDataBound(object sender, GridViewRowEventArgs e) { // This grid has mul

我已经修改了我的GridView,使其有一个额外的标题行,但是该额外的行导致我的grid view行数不正确

基本上,当我现在想保存Gridview时,它无法识别最后一行项目。 在我当前的测试中,我有5个项目行,但是只有4个项目行被保存

用于创建附加标题行的我的代码:

  protected void gvStatusReport_RowDataBound(object sender, GridViewRowEventArgs e)
   {
      // This grid has multiple rows, fake the top row.
      if (e.Row.RowType == DataControlRowType.Header)
      {
         SortedList FormatCells = new SortedList();
         FormatCells.Add("1", ",6,1");
         FormatCells.Add("2", "Time Spent,7,1");
         FormatCells.Add("3", "Total,2,1");
         FormatCells.Add("4", ",6,1");

         GetMultiRowHeader(e, FormatCells);
      }
    }
创建新行的函数:

       public void GetMultiRowHeader(GridViewRowEventArgs e, SortedList GetCels)
   {
      GridViewRow row;
      IDictionaryEnumerator enumCels = GetCels.GetEnumerator();

      row = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
      while (enumCels.MoveNext())
      {
         string[] count = enumCels.Value.ToString().Split(Convert.ToChar(","));
         TableCell cell = new TableCell();
         cell.RowSpan = Convert.ToInt16(count[2].ToString());
         cell.ColumnSpan = Convert.ToInt16(count[1].ToString());
         cell.Controls.Add(new LiteralControl(count[0].ToString()));
         cell.HorizontalAlign = HorizontalAlign.Center;
         row.Cells.Add(cell);
      }

      e.Row.Parent.Controls.AddAt(0, row);
   }
然后,当我要保存时,我循环遍历行:

 int totalRows = gvStatusReport.Rows.Count;

      for (int rowNumber = 0; rowNumber < totalRows; rowNumber++)
      {
int totalRows=gvStatusReport.Rows.Count;
对于(int rowNumber=0;rowNumber
但是,第一行似乎没有项行所具有的任何列,最后一行甚至没有显示


我的问题是我确实需要额外的标题行,但是解决这个问题的最佳方法是什么?

我记得曾经使用过这个,我认为您不能像这样添加到
GridView.Controls


您必须将
GridView.Controls[0]作为Table
(仅在数据绑定后工作,但在您的情况下这应该是正常的),然后将其添加到Table row集合
Table.Rows.add(myrow)
我已通过以下代码解决了此问题:

protected void gvStatusReport_RowCreated(object sender, GridViewRowEventArgs e)
   {
      if (e.Row.RowType == DataControlRowType.Header)
      {
         GridView HeaderGrid = (GridView)sender;
         GridViewRow HeaderGridRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert);
         TableCell HeaderCell = new TableCell();
         HeaderCell.ColumnSpan = 6;
         HeaderGridRow.Cells.Add(HeaderCell);

         HeaderCell = new TableCell();
         HeaderCell.Text = "Time Spent";
         HeaderCell.ColumnSpan = 7;
         HeaderGridRow.Cells.Add(HeaderCell);

         HeaderCell = new TableCell();
         HeaderCell.Text = "Total";
         HeaderCell.ColumnSpan = 2;
         HeaderGridRow.Cells.Add(HeaderCell);

         HeaderCell = new TableCell();
         HeaderCell.ColumnSpan = 6;
         HeaderGridRow.Cells.Add(HeaderCell);

         gvStatusReport.Controls[0].Controls.AddAt(0, HeaderGridRow);
      }
   }

我已经尝试过了,但是它现在不是不保存最后一条记录,而是将所有结果上移一行,然后将数据完全弄乱。