Problem mit DataGridViewComboBoxColumn

16/05/2008 - 11:00 von Stephan Glahs | Report spam
Hallo Leute!

Ich habe ein Problem mit einer
DataGridViewComboBoxColumn.

Hier erstmal der Code:

\\
With dgv1
.AutoGenerateColumns = False
Dim DGVC As DataGridViewComboBoxColumn
Dim DGVCB As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn
With DGVCB
.ValueType = GetType(Integer)
.HeaderText = "Einheit"
.DataPropertyName = "EinheitId"
.ValueMember = "id"
.DisplayMember = "name"
.DataSource = tblEinheit (Vorhandenes TableObject)
.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
.DisplayStyleForCurrentCellOnly = True
.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
.SortMode = DataGridViewColumnSortMode.Automatic
End With
.Columns.Add(DGVCB)
.DataSource = otblArtikelEinheiten.DataSource (Vorhandenes
BindingSource-Object)
End With

//

Ich möchte mit der ComboBox den "EinheitId"-Wert der Zeile veràndern.
Ich weise der ComboBox einwandfrei den ValueMember und Displaymember
sowie die DataSource zu. Spalte EinheitId ist vorhanden, alles bestens,
sollte
man meinen...

Beim Öffnen der Form, sieht man das der Datensatz angezeigt wird, es
erscheint
aber sofort eine Fehlermeldung, die sich nicht mehr wegklicken làsst:

System.FormatException : Der DataGridViewComboBoxCell-Wert ist ungültig.

Man sieht aber schon, das in der ComboBox der numerische Wert von
"EinheitId"
angezeigt wird.

Was mache ich falsch?
Ich habe mich schon halb tot gegoogelt, aber bei allen die àhnliche Probleme
hatten,
lag es an was anderem. Es wird auch oft auf ein beipiel auf PeterGötz's
Homepage
verwiesen, aber der hilft auch nicht, der Code oben ist nàmlich bereits
daher...

Vielen Dank für Eure Hilfe,

Stephan Glahs
 

Lesen sie die antworten

#1 Peter Fleischer
16/05/2008 - 11:52 | Warnen spam
"Stephan Glahs" schrieb im Newsbeitrag
news:%

Ich möchte mit der ComboBox den "EinheitId"-Wert der Zeile veràndern.
Ich weise der ComboBox einwandfrei den ValueMember und Displaymember
sowie die DataSource zu. Spalte EinheitId ist vorhanden, alles bestens,
sollte
man meinen...

Beim Öffnen der Form, sieht man das der Datensatz angezeigt wird, es
erscheint
aber sofort eine Fehlermeldung, die sich nicht mehr wegklicken làsst:

System.FormatException : Der DataGridViewComboBoxCell-Wert ist ungültig.

Man sieht aber schon, das in der ComboBox der numerische Wert von
"EinheitId"
angezeigt wird.

Was mache ich falsch?



Hi Stephan,
deine daten sind nicht konsistent!

Ich habe mich schon halb tot gegoogelt, aber bei allen die àhnliche
Probleme hatten,
lag es an was anderem.



Das glaube ich dir nicht.

Es wird auch oft auf ein beipiel auf PeterGötz's Homepage
verwiesen, aber der hilft auch nicht, der Code oben ist nàmlich bereits
daher...



Dann hast du bistimmt nicht alles berücksichtigt oder etwas veràndert.

Hier mal meine Demo mit deinem Code, die für die vorhandenen daten
problemlos funktioniert.

Option Strict On
Option Infer On

Public Class Form1

Dim dgv1 As New DataGridView With {.Dock = DockStyle.Fill}

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load

Dim tblEinheit As DataTable = otblArtikelEinheiten.tblEinheit

With dgv1
.AutoGenerateColumns = False
Dim DGVCB As DataGridViewComboBoxColumn = _
New DataGridViewComboBoxColumn
With DGVCB
.ValueType = GetType(Integer)
.HeaderText = "Einheit"
.DataPropertyName = "EinheitId"
.ValueMember = "id"
.DisplayMember = "name"
.DataSource = tblEinheit '(Vorhandenes TableObject)
.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
.DisplayStyleForCurrentCellOnly = True
.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
.SortMode = DataGridViewColumnSortMode.Automatic
End With
.Columns.Add(DGVCB)
.DataSource = otblArtikelEinheiten.DataSource
' (Vorhandenes BindingSource-Object)
End With
Me.Controls.AddRange(New Control() {dgv1})
End Sub

End Class

Public Class otblArtikelEinheiten
Private Shared bs2 As BindingSource
Private Shared dt1 As DataTable
Public Shared ReadOnly Property DataSource() As BindingSource
Get
Return bs2
End Get
End Property
Public Shared ReadOnly Property tblEinheit() As DataTable
Get
Return dt1
End Get
End Property
Shared Sub New()
dt1 = New DataTable("Einheiten")
With dt1
With .Columns
.Add("id", GetType(Integer))
.Add("name", GetType(String))
End With
For i = 1 To 10
.Rows.Add(.NewRow)
With .Rows(.Rows.Count - 1)
.Item(0) = i
.Item(1) = "Einheit " & i.ToString
End With
Next
End With
'
Dim dt2 = New DataTable("Liste")
With dt2
With .Columns
.Add("id", GetType(Integer))
.Add("name", GetType(String))
.Add("EinheitId", GetType(Integer))
End With
For i = 1 To 100
.Rows.Add(.NewRow)
With .Rows(.Rows.Count - 1)
.Item(0) = i
.Item(1) = "Listenelement " & i.ToString
.Item(2) = CInt(1 + 9 * Rnd())
End With
Next
End With
bs2 = New BindingSource(dt2, "")
End Sub
End Class

Viele Gruesse

Peter

Ähnliche fragen