DataGridViewのコンボボックスについて

解決


fumofumo  2009-06-10 16:14:56  No: 142052  IP: 192.*.*.*

環境:WinXP(SP3) VB2005 Oracle9i

テーブルに四則演算子を入れるのに
DataGridView のコンボボックスを使用したところ

System.ArgumentException:DataGridViewComboBoxcell
の値が有効ではありません
この既定のダイアログを置き換えるには、DataError 
イベントをハンドルしてください。

のエラーが発生します。
そこで DataErrorをハンドルしてみたのですが
DataGridView には1行しか表示していないにも
かかわらず2,4,20行目でエラーが発生している
みたいなのですがなぜ表示してもいない行で
エラーが発生しているかわかりません。
ご教授願います。

Dim column1 As New DataGridViewComboBoxColumn()
Dim column2 As New DataGridViewComboBoxColumn()
Dim column3 As New DataGridViewComboBoxColumn()
Dim column4 As New DataGridViewComboBoxColumn()

column1.Items.Add("+")
column1.Items.Add("−")
column1.Items.Add("×")
column1.Items.Add("÷")
column2.Items.Add("+")
column2.Items.Add("−")
column2.Items.Add("×")
column2.Items.Add("÷")
column3.Items.Add("+")
column3.Items.Add("−")
column3.Items.Add("×")
column3.Items.Add("÷")
column4.Items.Add("+")
column4.Items.Add("−")
column4.Items.Add("×")
column4.Items.Add("÷")

-- コンボボックス設定処理 --
With DataGridView2
    Select Case ChotatsuK
        Case "内作"
          '式列にバインドされているデータを表示する
          column1.DataPropertyName = "式1"
          column2.DataPropertyName = "式2"
          column3.DataPropertyName = "式3"
          column4.DataPropertyName = "式4"
          '式列の代わりにComboBox列を表示する
          .Columns.Insert(.Columns("式1").Index, column1)
          .Columns.Remove("式1")column1.Name = "式1"
          .Columns.Insert(.Columns("式2").Index, column2)
          .Columns.Remove("式2")
          column2.Name = "式2"
          .Columns.Insert(.Columns("式3").Index, column3)
          .Columns.Remove("式3")
          column3.Name = "式3"
          .Columns.Insert(.Columns("式4").Index, column4)
          .Columns.Remove("式4")
          column4.Name = "式4"
        Case "外作", "購入"
          '式列にバインドされているデータを表示する
          column2.DataPropertyName = "式2"
          column3.DataPropertyName = "式3"
          column4.DataPropertyName = "式4"
          '式列の代わりにComboBox列を表示する
          .Columns.Insert(.Columns("式2").Index, column2)
          .Columns.Remove("式2")
          column2.Name = "式2"
          .Columns.Insert(.Columns("式3").Index, column3)
          .Columns.Remove("式3")
          column3.Name = "式3"
          .Columns.Insert(.Columns("式4").Index, column4)
          .Columns.Remove("式4")
          column4.Name = "式4"
       Case "材料"
         '式列にバインドされているデータを表示する
         column1.DataPropertyName = "式1"
         '式列の代わりにComboBox列を表示する
         .Columns.Insert(.Columns("式1").Index, column1)
         .Columns.Remove("式1")
         column1.Name = "式1"
    End Select
End With

-- DataError処理 --
Private Sub DataGridView2_DataError(ByVal sender As Object, _
            ByVal e As DataGridViewDataErrorEventArgs) _
            Handles DataGridView2.DataError
    If Not (e.Exception Is Nothing) Then
       MessageBox.Show(Me, _
       String.Format("({0}, {1}) のセルでエラーが発生しました。" + _
                    vbCrLf + vbCrLf + "説明: {2}", _
                    e.ColumnIndex, e.RowIndex, e.Exception.Message), _
                "エラーが発生しました", _
                MessageBoxButtons.OK, _
                MessageBoxIcon.Error)
    End If
End Sub

http://dobon.net/vb/dotnet/
上記URLを参考にしました。
不透明、不明な部分がございましたら
ご指摘のほど宜しくお願い致します。

編集 削除
fumofumo  2009-06-11 13:13:19  No: 142053  IP: 192.*.*.*

調べた結果コンボボックにデータを入れずに
DataGridView を表示していた為で、
コンボボックスにデータを入れて表示したら
エラーはでなくなりました。

編集 削除