- PR -

VS2005でGridViewのヘッダーを複数行にする方法

投稿者投稿内容
ミヨ
常連さん
会議室デビュー日: 2006/09/12
投稿数: 21
投稿日時: 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/12
投稿数: 21
投稿日時: 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
--------------------------------------------------------------

ご教授宜しくお願い致します。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-09-19 17:17
Go_Firstというメソッドはどこで(どのタイミングで)呼び出していますか?
ミヨ
常連さん
会議室デビュー日: 2006/09/12
投稿数: 21
投稿日時: 2006-09-19 17:21
どっとねっとふぁんさま

ご返答ありがとうございます。
Go_Firstは、Form_LoadでDB接続後に呼び出しております。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-09-19 17:43
引用:

ミヨさんの書き込み (2006-09-19 10:49) より:

前回書き込みで「未記入さま」と書き込んでしまい、申し訳ありませんでした。
前回のみ自宅から書き込みしたのですが、かるあさまの名前が「未記入」で表示されていたので上記のように書き込んでしましました。ご教授いただいたのにお名前を正しく記入せず申し訳ありませんでした。


いえ、どうも設定時に名前を変更してしまったようで、
戸惑わせてすみませんでした。

最初に参考にしたこのソースと比べて何が違うかを見てください。
http://www.atmarkit.co.jp/fdotnet/dotnettips/095multiheader/multiheader.html
GridView への DataBind() のタイミングが違いませんか?

_________________
かるあ のメモスニペット
ミヨ
常連さん
会議室デビュー日: 2006/09/12
投稿数: 21
投稿日時: 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会議室に書き込みをして本当によかったです。
ありがとうございました!!
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-09-20 09:48
引用:

ミヨさんの書き込み (2006-09-20 09:32) より:

コード:
' 1.DataBind 前
With GridView 
.DataSource = CreateDataSet(sSql) 
.DataBind() 
' 2.DataBind 後




解決したようでよかったです。

ただ、前にも行ったようにウォッチ式などを使って
Controls の中に何が入っているのかを確認したほうが良いと思います。
とくに DataBind の前と後で見比べてみると、
今回なんで例外が発生したのかがわかると思います。
ミヨ
常連さん
会議室デビュー日: 2006/09/12
投稿数: 21
投稿日時: 2006-09-20 10:45
かるあさま
ご教授ありがとうございます。
引用:

かるあさんの書き込み (2006-09-20 09:48) より:
とくに DataBind の前と後で見比べてみると、
今回なんで例外が発生したのかがわかると思います。


DataBind修正前と修正後のRowの中を見比べてみると
CliendID、NamingContainer、Page、Parent、UniqueID が"Nothing"になっていました。
修正前の状態では、まだ作成されていない存在しないテーブルのセルを変更しようとしていたからエラーが起きていた・・・という認識で合っていますでしょうか?
エラーの原因をちゃんと確認していれば次回につながりますよね。
色々と本当にありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)