QA@IT
«質問へ戻る

質問を投稿

ASP.NETのGridViewでヘッダを複数行にするときに、デザインで作成したヘッダの下にヘッダを追加したい・・・または、全部自作のヘッダでAllowSorting = trueを有効にしたい

http://qa.atmarkit.co.jp/q/2584
↑こちらの質問を見ながら、複数行ヘッダのGridViewを作っていたのですが
元々デザインされているヘッダの上に作ることはできるようなのですが、
デザイン時に作成したヘッダの下の行に追加する形で、ヘッダを複数行にすることはできないでしょうか

というのも、
ヘッダ追加の最後に
((GridView)sender).Controls[0].Controls.AddAt(-1, row);

とありますが
これだと、デザイン時に作成したヘッダの上に作られてしまいます
それで、
((GridView)sender).Controls[0].Controls.AddAt(0, row);

((GridView)sender).Controls[0].Controls.AddAt(1, row);

等としてみたのですが、0だとやはり上に作られ、1だと、存在しない行に追加はできないというエラーになります
デザイン時に作ったヘッダの下に追加する方法はないでしょうか

なぜこんな事をするかというと
1度、デザイン時のヘッダをShowHeader=falseにし、全てプログラム内でヘッダを作成し(もちろん最初に参照したページの方法そのまま使って)
AllowSorting = true;としてみたのですが、そうすると、ソートはできない状態で(つまりただの文字だけ)ヘッダが作成されてしまいます
セルに対して SortExpression を設定出来ればいいのでしょうがなかなかその方法もわからず
以下のようにしてみたのですが・・

GridViewRow row = new GridViewRow(2, 0, DataControlRowType.Header, DataControlRowState.Normal);
BoundField b = new BoundField();
TableHeaderCell hcDate = new TableHeaderCell();
hcDate.Controls.Add(new LiteralControl("日時"));
hcDate.RowSpan = 2;
hcDate.CssClass = "title";
hcDate.Width = 136;
b = (BoundField)hcDate;//エラーになる
b.SortExpression = "日時";
row.Cells.Add(hcDate);

多分、このSortExpressionを何とか設定出来れば、デザイン時のヘッダは気にしなくてもいいとは思うのですが・・・

質問としては
1.デザイン時のヘッダの後ろに、自作ヘッダを追加出来ないか
2.プログラム中で作成したヘッダにSortExpression を設定出来ないか
のどちらかでお願いします

http://qa.atmarkit.co.jp/q/2584
↑こちらの質問を見ながら、複数行ヘッダのGridViewを作っていたのですが
元々デザインされているヘッダの上に作ることはできるようなのですが、
デザイン時に作成したヘッダの下の行に追加する形で、ヘッダを複数行にすることはできないでしょうか

というのも、
ヘッダ追加の最後に
((GridView)sender).Controls[0].Controls.AddAt(-1, row);   
とありますが
これだと、デザイン時に作成したヘッダの上に作られてしまいます
それで、
((GridView)sender).Controls[0].Controls.AddAt(0, row);   
((GridView)sender).Controls[0].Controls.AddAt(1, row);   
等としてみたのですが、0だとやはり上に作られ、1だと、存在しない行に追加はできないというエラーになります
デザイン時に作ったヘッダの下に追加する方法はないでしょうか

なぜこんな事をするかというと
1度、デザイン時のヘッダをShowHeader=falseにし、全てプログラム内でヘッダを作成し(もちろん最初に参照したページの方法そのまま使って)
AllowSorting = true;としてみたのですが、そうすると、ソートはできない状態で(つまりただの文字だけ)ヘッダが作成されてしまいます
セルに対して SortExpression を設定出来ればいいのでしょうがなかなかその方法もわからず
以下のようにしてみたのですが・・
```
GridViewRow row = new GridViewRow(2, 0, DataControlRowType.Header, DataControlRowState.Normal);
BoundField b = new BoundField();
TableHeaderCell hcDate = new TableHeaderCell();
hcDate.Controls.Add(new LiteralControl("日時"));
hcDate.RowSpan = 2;
hcDate.CssClass = "title";
hcDate.Width = 136;
b = (BoundField)hcDate;//エラーになる
b.SortExpression = "日時";
row.Cells.Add(hcDate);
```
多分、このSortExpressionを何とか設定出来れば、デザイン時のヘッダは気にしなくてもいいとは思うのですが・・・

質問としては
1.デザイン時のヘッダの後ろに、自作ヘッダを追加出来ないか
2.プログラム中で作成したヘッダにSortExpression を設定出来ないか
のどちらかでお願いします