| |
VB.NET - FortgeschritteneEinzelne Zelle eines DataGridView in ComboBox umwandeln | | | Autor: mlootz | Datum: 16.09.14 10:21 |
| Hallo,
ich wandle eine Zelle im DataGridView wie folgt um:
Dim CboCell As New DataGridViewComboBoxCell CboCell.Items.Clear() CboCell.Items.AddRange("Yes", "No") DataGridView3.Rows(e.RowIndex).Cells(e.ColumnIndex) = CboCell Das funktioniert bei 9 von 10 cellen ohne Probleme. Aber manchmal eben nicht: Bei immer den Gleichen Cellen bekomme ich dann folgende Fehlermeldung:
Eine Ausnahme (erste Chance) des Typs "System.InvalidOperationException" ist in System.Windows.Forms.dll aufgetreten.
System.InvalidOperationException: Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function.
at System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
at System.Windows.Forms.DataGridView.ResetCurrentCell()
at System.Windows.Forms.DataGridView.OnReplacingCell(DataGridViewRow dataGridViewRow, Int32 columnIndex)
at System.Windows.Forms.DataGridViewCellCollection.set_Item(Int32 index, DataGridViewCell value)
at ERF_Manager.ERF_main.DataGridView3_CellEnter(Object sender, DataGridViewCellEventArgs e) in C:\Users\mlootz\Documents\Visual Studio 2010\Projects\ERF Manager\ERF Manager\ERF Manager.vb:line 1207
Der Fehler wird zwar über Try und Catch ex As Exception abgefangen aber die Celle wird dann natürlich nicht in eine ComboBox umgewandelt.
Alle Cellen im DataGridView3 sind vom Typ TextBoxCell. Und wie gesagt, es funktioniert bei den meisten Cellen ohne Fehler.
Hat jemand eine Idee woran es liegen könnte?
| |
Re: Einzelne Zelle eines DataGridView in ComboBox umwandeln | | | Autor: mlootz | Datum: 16.09.14 14:27 |
| [u]Nachtrag
Interessant: Es ist immer nur die 4. Zeile der 4. Spalte davon betroffen.
Verdoppele ich die 4. Zeile mit
ERF_main.DataGridView3.Rows.Add(val1, val2, val3, val4) so funktioniert die Umstellung auf die ComboBox in der 5. Zeile / 4. Spalte.
| |
Re: Einzelne Zelle eines DataGridView in ComboBox umwandeln | | | Autor: mlootz | Datum: 17.09.14 15:16 |
| Ursache gefunden:
Es liegt am Ereignis Handler: Es funktioniert fehlerfrei beim CellClick Event, nicht jedoch beim CellEnter, CellLeave oder CellValidated.
Hier ein Beispiel bei einem DGV mit 8 Spalten (Spalte1 - Spalte8):
Public Class Form1
Private sp As Integer = 0
Private ze As Integer = 0
Private cell_wechsel As Boolean = False
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
For i = 0 To 10
DataGridView1.Rows.Add("Yes", "Yes", "Yes", "Yes", "Yes", "Yes", _
"Yes", "Yes")
Next
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e _
As System.Windows.Forms.DataGridViewCellEventArgs) Handles _
DataGridView1.CellClick
If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).GetType.ToString _
= "System.Windows.Forms.DataGridViewComboBoxCell" Then
Exit Sub
End If
If cell_wechsel = True Then
Dim TxtCell As New DataGridViewTextBoxCell
Dim merk As String = DataGridView1.Rows(ze).Cells(sp).Value
DataGridView1.Rows(ze).Cells(sp) = TxtCell
DataGridView1.Rows(ze).Cells(sp).Value = merk
cell_wechsel = False
End If
'Debug.Print(DataGridView1.Rows(e.RowIndex).Cells(
' e.ColumnIndex).GetType.ToString)
Dim CboCell As New DataGridViewComboBoxCell
CboCell.Items.Clear()
CboCell.Items.Add("Yes")
CboCell.Items.Add("No")
CboCell.Items.Add("None")
'Debug.Print("Zeile " & e.RowIndex & " Spalte " & e.ColumnIndex)
If e.RowIndex = 0 And e.ColumnIndex = 0 Then
Else
Dim r As Int32 = e.RowIndex
Dim c As Int32 = e.ColumnIndex
DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).ReadOnly = True
Dim merk As String = DataGridView1.Rows(e.RowIndex).Cells( _
e.ColumnIndex).Value
DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex) = CboCell
DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).ReadOnly = False
DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = merk
End If
End Sub
Private Sub DataGridView1_CellLeave(ByVal sender As System.Object, ByVal e _
As System.Windows.Forms.DataGridViewCellEventArgs) Handles _
DataGridView1.CellLeave
If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).GetType.ToString _
= "System.Windows.Forms.DataGridViewTextBoxCell" Then
Exit Sub
End If
ze = e.RowIndex
sp = e.ColumnIndex
cell_wechsel = True
End Sub
End Class | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|