QA@IT
«回答へ戻る

回答を投稿

ありがとうございます
どうも、ヘッダの作成時にではなく、
フッタを作ったときに
if (e.Row.RowType == DataControlRowType.Footer)
の時に、自作のヘッダを追加すればうまくいくみたいですね
if (e.Row.RowType == DataControlRowType.Header)
の時は、まだ、データ部ができていないので挿入しようとすると
エラーになってしまったようでした

if (e.Row.RowType == DataControlRowType.Header) {
    e.Row.TableSection = System.Web.UI.WebControls.TableRowSection.TableHeader;
    MakeHeader(GridView1, e);   //ヘッダの準備
} else if (e.Row.RowType == DataControlRowType.DataRow) {
    e.Row.TableSection = System.Web.UI.WebControls.TableRowSection.TableBody;
} else if (e.Row.RowType == DataControlRowType.Footer) {
    e.Row.TableSection = System.Web.UI.WebControls.TableRowSection.TableFooter;
    MakeHeader(GridView1, e);   //最後にヘッダを加工する
}
----------------------------------------------------
public static void MakeHeader(GridView gV, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header) {   //ヘッダの時の処理
    //既存のヘッダを2段にする準備
    e.Row.Cells[0].RowSpan = 2;     //
    e.Row.Cells[1].RowSpan = 2;     //

} else if (e.Row.RowType == DataControlRowType.Footer) {    //フッタの時の処理
    //行追加
    GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);

    TableHeaderCell hcMae = new TableHeaderCell();
    hcMae.Controls.Add(new LiteralControl("前"));
    hcMae.CssClass = "title";
    row.Cells.Add(hcMae);

    TableHeaderCell hcAto = new TableHeaderCell();
    hcAto.Controls.Add(new LiteralControl("後"));
    hcAto.CssClass = "title";
    row.Cells.Add(hcAto);

    row.TableSection = TableRowSection.TableHeader;
    gV.Controls[0].Controls.AddAt(1, row);
}
}

としたらうまくいきました(値と上のプログラムはセルをいくつかはしょっているので、結合がおかしくなりますが)

ありがとうございます
どうも、ヘッダの作成時にではなく、
フッタを作ったときに
if (e.Row.RowType == DataControlRowType.Footer)
の時に、自作のヘッダを追加すればうまくいくみたいですね
if (e.Row.RowType == DataControlRowType.Header)
の時は、まだ、データ部ができていないので挿入しようとすると
エラーになってしまったようでした

```
if (e.Row.RowType == DataControlRowType.Header) {
	e.Row.TableSection = System.Web.UI.WebControls.TableRowSection.TableHeader;
	MakeHeader(GridView1, e);	//ヘッダの準備
} else if (e.Row.RowType == DataControlRowType.DataRow) {
	e.Row.TableSection = System.Web.UI.WebControls.TableRowSection.TableBody;
} else if (e.Row.RowType == DataControlRowType.Footer) {
	e.Row.TableSection = System.Web.UI.WebControls.TableRowSection.TableFooter;
	MakeHeader(GridView1, e);	//最後にヘッダを加工する
}
----------------------------------------------------
public static void MakeHeader(GridView gV, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header) {	//ヘッダの時の処理
	//既存のヘッダを2段にする準備
	e.Row.Cells[0].RowSpan = 2;		//
	e.Row.Cells[1].RowSpan = 2;		//

} else if (e.Row.RowType == DataControlRowType.Footer) {	//フッタの時の処理
	//行追加
	GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);

	TableHeaderCell hcMae = new TableHeaderCell();
	hcMae.Controls.Add(new LiteralControl("前"));
	hcMae.CssClass = "title";
	row.Cells.Add(hcMae);

	TableHeaderCell hcAto = new TableHeaderCell();
	hcAto.Controls.Add(new LiteralControl("後"));
	hcAto.CssClass = "title";
	row.Cells.Add(hcAto);

	row.TableSection = TableRowSection.TableHeader;
	gV.Controls[0].Controls.AddAt(1, row);
}
}
```
としたらうまくいきました(値と上のプログラムはセルをいくつかはしょっているので、結合がおかしくなりますが)