- PR -

既に同じマップ名のテーブルスタイルが含まれています

1
投稿者投稿内容
みかん
常連さん
会議室デビュー日: 2003/12/13
投稿数: 42
投稿日時: 2006-05-09 22:58
VB2003Proを使用しています。
DataGridにデータを表示するプログラムを作成するにあたって
Form_Load時にスタイルを設定し、ボタンクリックでデータ表示させる
方法をご教授いただけませんでしょうか。

理由としては、ボタンクリック時に、データグリッドにデータが表示される
プログラムを作成したのですが、2回目のクリックで下記のメッセージが
出てしまいました。
 'System.ArgumentException' のハンドルされていない
 例外が System.Windows.Forms.dll で発生しました。
 追加情報: このデータ グリッドのテーブル スタイル コレクションには
 既に同じマップ名のテーブル スタイルが含まれています。

そのためGoogleなどで検索したところ
・新しいDataGridTableStyleの作成
・マップ名の指定
・DataGridTableStyleをDataGridに追加
この3つをLoad時のみに実行することで解決するようなのですが
Form_Loadに設定したところ、「〜が宣言されていません」などのエラーがでるので
ボタンクリック時のデータ作成直前に

DataGrid1.TableStyles.Clear()
をいれたところエラーはでなくなりました。

一応動くのですが、このままだと、汚いソースになりそうなので
Form_Load時にスタイルを設定し、ボタンクリックでデータ表示させる
方法をご教授いただけると助かります。
因みに現在のコードは以下のようになっております。
※フォームにBotton1、DataGrid1を貼り付けた状態です。
以下コード-------------------------------
Dim dataSet As DataSet = New DataSet
Dim MeisaiTbl As DataTable

'テーブルスタイル
Dim ts As New DataGridTableStyle

'カラムスタイル 1列目
Dim Column1 As New DataGridTextBoxColumn

DataGrid1.TableStyles.Clear()


'テーブルの作成
MeisaiTbl = dataSet.Tables.Add("MEISAI")
MeisaiTbl.Columns.Add("項目1", Type.GetType("System.UInt32"))

'データの作成
MeisaiTbl.Rows.Add(New Object() {1})
MeisaiTbl.Rows.Add(New Object() {2})
MeisaiTbl.Rows.Add(New Object() {3})

' テーブル・スタイルの作成
'テーブル名のセット
ts.MappingName = MeisaiTbl.TableName

'列ヘッダによるソートを禁止
ts.AllowSorting = False

'カラム・スタイルの作成
'カラムのマッピング
Column1.MappingName = MeisaiTbl.Columns(0).ColumnName

'列見出しのセット
Column1.HeaderText = "項目1"

'列幅の設定
Column1.Width = 50

'DataGrid1 の見出しを表示,非表示
DataGrid1.CaptionVisible = True

'レコードセレクタの幅を変更
DataGrid1.RowHeaderWidth = 10

'読み取り専用モードにする
ts.ReadOnly = True

'背景の色を変更
DataGrid1.BackgroundColor = System.Drawing.Color.Pink

'テーブルスタイル/カラムスタイルの適用
'テーブルスタイルを追加
DataGrid1.TableStyles.Add(ts)

'奇数行に色をつける
'DataGrid1.AlternatingBackColor = System.Drawing.Color.Red
ts.AlternatingBackColor = Color.Red

'DataGrid1 に設定を反映
DataGrid1.SetDataBinding(dataSet, MeisaiTbl.TableName)
ここまで-------------------------------
以上、宜しくお願いいたします。



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-05-10 05:47
 なぜエラーになるのか、なぜ例外が発生するのか、というところを考えれば、自ずと解決しそうなんだけど。。。

 2回目のクリックで、「既に同じマップ名のテーブル スタイルが含まれています。」の例外が発生し、ボタンクリック時のデータ作成直前にDataGrid1.TableStyles.Clear() をいれたところエラーはでなくなった理由について、理解していますか?

 Load 時のみに実行することで解決するようなのですが Form_Loadに設定したところ、「〜が宣言されていません」などのエラーがでるところから、なぜ Clear を入れるになったのか、その理由が見当つかないのですが。。。
 「宣言されていない」のなら、宣言すればいいと思うのですが、どう考えたら Clear を入れるにつながったのでしょう?
1

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