DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DatagridViewComboboxCellを追加

環境/言語:[XP/VB.Net, FrameWorkのバージョン 2.0]
分類:[.NET]

2009/12/24(Thu) 14:42:49 編集(投稿者)
2009/12/24(Thu) 14:42:22 編集(投稿者)

DatagridviewComboboxCellについて聞きたいですが、
各セルのコンボボックスに違い値を入れたいけど、以下のエラーが出ました。
"指定されたセルはグリッドにすでに属しています"。

ソース例:
Dim Reader As FileReader = New FileReader("C://text.txt")
Dim cbb as New DatagridviewComboboxCell()
Dim cbb1 as New DatagridviewComboboxCell()
Dim strA as String = ""
Dim t as integer = 0

Me.Controls.Add(Dtgrdview)
Dtgrdview.ColumnCount = 5

(省略)

For i as Integer = 0 to 10
Select case strA
Case "A"
cbb.Items.Add(Cstr(i))
Case "B"
cbb1.Items.Add(Cstr(i+1))
End Select

Next

With Dtgrdview.Rows
While not Reader.EndofData

    Dim _readFile As readFile = New readFile(Reader.ReadFields())
'(readFile.vbは別)
Dim row As String() = _ {_readFile.Class,_readFile.Name,_readFile.Year,_readFile.Add}
'
Dtgrdview.Rows.Add(row)
Select Case _readFile.ID
Case "A"
Dtgrdview.Rows(t).Cells(4) = cbb ==> t= 1 エラーが出る
Case Else
Dtgrdview.Rows(t).Cells(4) = cbb1
End Select
t += 1
End While
ReadFile.Close()

End With

解決方法を教えてください。ありがとうございます。
■No26136に返信(VBnewerさんの記事)
> "指定されたセルはグリッドにすでに属しています"。
DataGridViewComboBoxCell のインスタンスは Cell 間で共有できないです
よーという意味ではないかしら。
Cell ごとに DataGridViewComboBoxCell のインスタンスを作成するようにし
てみてはいかがでしょうか。

Public Class Form1
    Private Sub Form1_Load( ...
        ...
                Select Case _readFile.ID
                    Case "A"
                        Dtgrdview.Rows(t).Cells(4) = CreateComboBoxCellA()
                    Case Else
                        Dtgrdview.Rows(t).Cells(4) = CreateComboBoxCellElse()
                End Select
        ...
    End Sub

    Function CreateComboBoxCellA() As DataGridViewComboBoxCell
        Dim comboBoxCellA As New DataGridViewComboBoxCell()

        For i As Integer = 0 To 10
            comboBoxCellA.Items.Add(CStr(i))
        Next

        Return comboBoxCellA
    End Function

    Function CreateComboBoxCellElse() As DataGridViewComboBoxCell
        Dim comboBoxCellElse As New DataGridViewComboBoxCell()

        For i As Integer = 0 To 10
            comboBoxCellElse.Items.Add(CStr(i + 1))
        Next

        Return comboBoxCellElse
    End Function
End Class
■No26141に返信(もりおさんの記事)
> ■No26136に返信(VBnewerさんの記事)
>>"指定されたセルはグリッドにすでに属しています"。
> DataGridViewComboBoxCell のインスタンスは Cell 間で共有できないです
> よーという意味ではないかしら。
> Cell ごとに DataGridViewComboBoxCell のインスタンスを作成するようにし
> てみてはいかがでしょうか。
>
> Public Class Form1
> Private Sub Form1_Load( ...
> ...
> Select Case _readFile.ID
> Case "A"
> Dtgrdview.Rows(t).Cells(4) = CreateComboBoxCellA()
> Case Else
> Dtgrdview.Rows(t).Cells(4) = CreateComboBoxCellElse()
> End Select
> ...
> End Sub
>
> Function CreateComboBoxCellA() As DataGridViewComboBoxCell
> Dim comboBoxCellA As New DataGridViewComboBoxCell()
>
> For i As Integer = 0 To 10
> comboBoxCellA.Items.Add(CStr(i))
> Next
>
> Return comboBoxCellA
> End Function
>
> Function CreateComboBoxCellElse() As DataGridViewComboBoxCell
> Dim comboBoxCellElse As New DataGridViewComboBoxCell()
>
> For i As Integer = 0 To 10
> comboBoxCellElse.Items.Add(CStr(i + 1))
> Next
>
> Return comboBoxCellElse
> End Function
> End Class

もりおさん。本当に助かりました。ありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板