- - PR -
VS2005でGridViewのヘッダーを複数行にする方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-19 10:49
かるあさま
前回書き込みで「未記入さま」と書き込んでしまい、申し訳ありませんでした。 前回のみ自宅から書き込みしたのですが、かるあさまの名前が「未記入」で表示されていたので上記のように書き込んでしましました。ご教授いただいたのにお名前を正しく記入せず申し訳ありませんでした。 ----------------------------------------------------------------------------- 引き続き質問させていただきます。 Dim row As DataGridRow = New DataGridRow(-1, -1, ListItemType.Header) に変更してみましたが「型'DataGridRow'が定義されていません」と表示されました。 名前空間で「Imports System.Web.UI.WebControls」と定義しているところが問題なのでしょうか? GridView.Controls(0).Controls.AddAt(0, row) にブレイクポイントを設置してエラー確認をしてみたところ 指定された引数は、有効な値の範囲内にありません。 パラメータ名:index と、表示されました。 GridView.Controls(1).Controls.AddAt(1, row) にしてみたりして数値を変更してみたのですが同様のエラーが表示されました。 質問ばかりで申し訳ありませんがご教授宜しくお願い致します。 | ||||||||
|
投稿日時: 2006-09-19 17:10
お世話になっております。
先程の投稿後に色々と検索して見つけたGridViewRowクラスのサンプルソースを参考に Dim row As DataGridRow = New DataGridRow(-1, -1, ListItemType.Header) を Dim Row As GridViewRow = New GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal) に修正しましたが、やはり同じエラーがでてしまいました。 どこか根本的なところが間違っているのでしょうか? -------------------- 以下現状ソース -------------------- Private Function Go_First() 'SQLからデータゲット Call AAA_SQL() Dim Cell As TableCell = New TableCell() Dim Row As GridViewRow = New GridViewRow(-1, -1, DataControlRowType.Header,DataControlRowState.Normal) Cell.ColumnSpan = 2 Cell.Text = "A" Row.Cells.Add(Cell) Cell.ColumnSpan = 2 Cell.Text = "B" Row.Cells.Add(Cell) 'ここで「指定された引数は、有効な値の範囲内にありません。パラメータ名:index」のエラーがでる。 GridView.Controls(0).Controls.AddAt(0, Row) With GridView .DataSource = CreateDataSet(sSql) .DataBind() End With End Function -------------------------------------------------------------- ご教授宜しくお願い致します。 | ||||||||
|
投稿日時: 2006-09-19 17:17
Go_Firstというメソッドはどこで(どのタイミングで)呼び出していますか?
| ||||||||
|
投稿日時: 2006-09-19 17:21
どっとねっとふぁんさま
ご返答ありがとうございます。 Go_Firstは、Form_LoadでDB接続後に呼び出しております。 | ||||||||
|
投稿日時: 2006-09-19 17:43
いえ、どうも設定時に名前を変更してしまったようで、 戸惑わせてすみませんでした。 最初に参考にしたこのソースと比べて何が違うかを見てください。 http://www.atmarkit.co.jp/fdotnet/dotnettips/095multiheader/multiheader.html GridView への DataBind() のタイミングが違いませんか? _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2006-09-20 09:32
解決しました!
かるあさま ご教授本当にありがとうございました。 DataBindのタイミングを修正したら見事に解決いたしました。 -------------------- 以下解決ソース -------------------- Private Function Go_First() 'SQLからデータゲット Call AAA_SQL() Dim Cell01 As TableCell = New TableCell() Dim Cell02 As TableCell = New TableCell() Dim Row As GridViewRow = New GridViewRow(-1, -1, DataControlRowType.Header,DataControlRowState.Normal) Cell01.ColumnSpan = 2 Cell01.Text = "A" Row.Cells.Add(Cell01) Cell02.ColumnSpan = 2 Cell02.Text = "B" Row.Cells.Add(Cell02) With GridView .DataSource = CreateDataSet(sSql) .DataBind() End With GridView.Controls(0).Controls.AddAt(0, Row) End Function -------------------------------------------------------------- 勇気を出して@IT会議室に書き込みをして本当によかったです。 ありがとうございました!! | ||||||||
|
投稿日時: 2006-09-20 09:48
解決したようでよかったです。 ただ、前にも行ったようにウォッチ式などを使って Controls の中に何が入っているのかを確認したほうが良いと思います。 とくに DataBind の前と後で見比べてみると、 今回なんで例外が発生したのかがわかると思います。 | ||||||||
|
投稿日時: 2006-09-20 10:45
かるあさま
ご教授ありがとうございます。
DataBind修正前と修正後のRowの中を見比べてみると CliendID、NamingContainer、Page、Parent、UniqueID が"Nothing"になっていました。 修正前の状態では、まだ作成されていない存在しないテーブルのセルを変更しようとしていたからエラーが起きていた・・・という認識で合っていますでしょうか? エラーの原因をちゃんと確認していれば次回につながりますよね。 色々と本当にありがとうございます。 |