- - PR -
既に同じマップ名のテーブルスタイルが含まれています
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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) ここまで------------------------------- 以上、宜しくお願いいたします。 |
|
投稿日時: 2006-05-10 05:47
なぜエラーになるのか、なぜ例外が発生するのか、というところを考えれば、自ずと解決しそうなんだけど。。。
2回目のクリックで、「既に同じマップ名のテーブル スタイルが含まれています。」の例外が発生し、ボタンクリック時のデータ作成直前にDataGrid1.TableStyles.Clear() をいれたところエラーはでなくなった理由について、理解していますか? Load 時のみに実行することで解決するようなのですが Form_Loadに設定したところ、「〜が宣言されていません」などのエラーがでるところから、なぜ Clear を入れるになったのか、その理由が見当つかないのですが。。。 「宣言されていない」のなら、宣言すればいいと思うのですが、どう考えたら Clear を入れるにつながったのでしょう? |
1