Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '@/////ComboBox1へログインユーザーにより、閲覧可能な部署を制限し表示 Dim dView As DataView Me.ComboBox1.Items.Clear() Me.OleDbDataAdapter1.Fill(Me.DataSet部署, "tbl_NI") dView = New DataView(Me.DataSetB.Tables("tbl_NI"), _ "ユーザー名 LIKE '*" & Environment.UserName & "*'" _ , "", DataViewRowState.CurrentRows)
実験的に以下のコードを作ってみたのですが、 ====================================================== Dim dt As DataTable = New DataTable("test_tablename") dt.Columns.Add("Column1", GetType(String)) dt.Rows.Add(New String() {"A"}) dt.Rows.Add(New String() {"B"}) dt.Rows.Add(New String() {"C"})
Dim tbStyle As DataGridTableStyle = New DataGridTableStyle tbStyle.MappingName = dt.TableName Me.DataGrid1.TableStyles.Clear() Me.DataGrid1.TableStyles.Add(tbStyle)
Dim colStyle As DataGridColumnStyle colStyle = New DataGridTextBoxColumn() colStyle.MappingName = "Column1" tbStyle.GridColumnStyles.Add(colStyle)
Dim testStyle As DataGridTextBoxColumn = New DataGridTextBoxColumn testStyle.MappingName = "Column1" ' 同じ名前で Add tbStyle.GridColumnStyles.Add(testStyle) ' ここで ArgumentException が発生する。 ====================================================== DataGridTableStyle オブジェクトの GridColumnStyles に 同じ MappingName の ものを Add すると上記例外が発生します。
分類:[.NET]
いつもお世話になっています。
2回目の投稿であり、VBビギナーです。
よろしくお願いいたします。
ComboBoxとDataGridを使用して、データベースからのレコードを条件により
抽出して表示させようとしています。
ComboBox1にはログイン名(Environment.Username)に応じたデータ(「部署」
というフィールド名)をデータソースに設定しています。
ComboBox1の選択肢を選択すると、その選択肢(「部署」)の人名などのレコードが
DataGridへ表示されるという仕組みです。
以下のようにコードを記述いたしました。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'@/////ComboBox1へログインユーザーにより、閲覧可能な部署を制限し表示
Dim dView As DataView
Me.ComboBox1.Items.Clear()
Me.OleDbDataAdapter1.Fill(Me.DataSet部署, "tbl_NI")
dView = New DataView(Me.DataSetB.Tables("tbl_NI"), _
"ユーザー名 LIKE '*" & Environment.UserName & "*'" _
, "", DataViewRowState.CurrentRows)
'コンボボックスにtbl_NIテーブルを連結する
ComboBox1.DataSource = dView
'コンボボックスに部署名を表示できるように設定する
Me.ComboBox1.DisplayMember = "部署名"
'備考に対応した部署名を SelectdValue で取得できるように設定する
Me.ComboBox1.ValueMember = "部署名"
'A/////DataGrid1へ氏名などを表示
Dim cStyle(10) As DataGridColumnStyle
Dim tStyle As DataGridTableStyle
tStyle = New DataGridTableStyle()
tStyle.MappingName = "table_人事"
DataGrid1.TableStyles.Add(tStyle)
cStyle(0) = New DataGridTextBoxColumn()
cStyle(0).HeaderText = "社員番号"
cStyle(0).MappingName = "社員番号"
cStyle(0).Width = 60
tStyle.GridColumnStyles.Add(cStyle(0))
cStyle(1) = New DataGridTextBoxColumn()
cStyle(1).HeaderText = "氏名"
cStyle(1).MappingName = "氏名"
cStyle(1).Width = 90
tStyle.GridColumnStyles.Add(cStyle(1))
cStyle(2) = New DataGridTextBoxColumn()
cStyle(2).HeaderText = "所属"
cStyle(2).MappingName = "所属"
cStyle(2).Width = 0
tStyle.GridColumnStyles.Add(cStyle(2))
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Me.OleDbDataAdapter2.Fill(DataSet人事, "table_J")
'所属にてデータビューを絞り込む
DataGrid1.TableStyles.Clear()
DataSet人事.Clear()
Dim dView2 As DataView
dView2 = New DataView(DataSet人事.Tables("table_J"), "所属
LIKE '*" & CType(CType(Me.ComboBox1.SelectedValue,
DataRowView).Item(0), String) & "*'", _
"", DataViewRowState.CurrentRows)
'DataGridに関連付けて表示する
DataGrid1.DataSource = dView2
End Sub
このように記述すると、デバッグ時にエラーが発生します。
エラー行:tStyle.GridColumnStyles.Add(cStyle(0))
エラー内容:
'System.ArgumentException' のハンドルされていない例外が system.windows.forms.dll で発生しました。
追加情報 : データ グリッドの列スタイル コレクションには、既に同じマップ名の列スタイルが含まれています。
DataGrid表示を工夫するために、DataGridTableStyleやDataGridColumnStyleを
使用しているだけなのですが、今回はエラーが発生します。
いろいろ考えたのですが、行き詰ってしまいました。
大変恐縮ですが、エラーの原因をどなたか教えていただけないでしょうか。
よろしくお願いいたします。