0

GridView を変更して追加のヘッダー行を追加しましたが、追加の行が原因でグリッド ビューの行数が正しくなくなりました。

基本的に、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++)
      {

ただし、最初の行にはアイテム行にある列がないようで、最後の行も表示されません。

私の問題は、追加のヘッダー行が必要なことですが、これを修正する最善の方法は何ですか?

4

2 に答える 2

0

これで作業したことを思い出し、これをGridView.Controls好きに追加することはできないと思います

GridView.Controls[0] as Table(データバインド後にのみ機能しますが、あなたの場合は問題ありません)を取得してから、テーブル行コレクションに追加する必要がありますTable.Rows.Add(myrow)

于 2013-07-02T11:02:03.087 に答える
0

次のコードでこの問題を解決できました。

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);
      }
   }
于 2013-07-03T10:29:16.610 に答える