Benutzer mit den meisten Antworten
Vb Net Datagridview ComboBox item auswählen

Frage
-
Zuerst erstelle ich ein Datagridview aus einer Tabelle
Dgv_Leistungsdaten.DataSource = LeistunsgdatenTable
Dann füre ich eine Combox hinzu und setze dabeo eine separate Datasource
Dim col_Messger As New DataGridViewComboBoxColumn With col_Messger .HeaderText = "Messgerät" .Name = "Messgeraet"
.DataSource = temptable_dt
.DisplayMember = "Bezeichnung_Seriennr"
.ValueMember = "Geraete_ID".DataPropertyName = "Geraete_ID"
End Wit
Dann werden ein paar Spalten ausgeschaltet, redonly gesetzt oder die Breite angepasst
Als nächstes versuche ich einen Eintrga aus der Combox auszuwählen, welche abhängig ist von einer anderen Spalte aus den Datagridview
Dim cell As DataGridViewComboBoxCell = DirectCast(Dgv_Leistungsdaten.Rows(n_xpi).Cells("Messgeraet"), DataGridViewComboBoxCell) 'For i_xpi = 0 To cell.Items.Count - 1 ' If cell. = Dgv_Leistungsdaten.Rows(n_xpi).Cells(4).Value.ToString Then ' Dgv_Leistungsdaten.Rows(n_xpi).Cells("Messgeraet").Value = cell.Items(i_xpi).ToString ' End If 'Next i_xpi With cell .Value = Dgv_Leistungsdaten.Rows(n_xpi).Cells(4).Value.ToString End With Dgv_Leistungsdaten.Rows(n_xpi).Cells("Messgeraet").Value = Dgv_Leistungsdaten.Rows(n_xpi).Cells(4).Value.ToString Dgv_Leistungsdaten.UpdateCellValue(17, n_xpi) Dgv_Leistungsdaten.Invalidate() Dgv_Leistungsdaten.Refresh()
Leider scheitert es, es wirg keinEintrag ausgewählt.
Ich habe ausgführlich gesucht und auch viele Beiträge gelesen, ohne Erfolg
Ich verwende Visual Studuo 2017
Solte noch etwas unklar sein, bitte einfa
- Bearbeitet PedroLopesdaCosta Mittwoch, 20. Januar 2021 09:17 added DataPropertyName
Antworten
-
Hi,
zur Demo teste mal das folgende Mini-Programm. Einfach in eine leere Form kopieren:Imports System.Collections.ObjectModel Public Class Form13 Private Sub Form13_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.Add(dgv) dgv.Columns.Add(New DataGridViewTextBoxColumn _ With {.HeaderText = "Master Info", .DataPropertyName = "MasterInfo"}) dgv.Columns.Add(New DataGridViewComboBoxColumn _ With {.HeaderText = "Lookup Data", .DataPropertyName = "FK", .DataSource = colLookUp, .DisplayMember = "Text", .ValueMember = "ID"}) dgv.DataSource = colData End Sub Private dgv As New DataGridView With {.Dock = DockStyle.Fill, .AutoGenerateColumns = False} Public Sub New() Dim rnd As New Random For i = 1 To 10 colData.Add(New Data With {.FK = rnd.Next(1, 5), .MasterInfo = $"MasterInfo {i}"}) Next For i = 1 To 4 colLookUp.Add(New LookUpData With {.ID = i, .Text = $"Lookup-Text {i}"}) Next End Sub Private colData As New ObservableCollection(Of Data) Private colLookUp As New ObservableCollection(Of LookUpData) ' DataGrid data Public Class Data Public Property FK As Integer ' foreign key value Public Property MasterInfo As String End Class ' ComboBox list data (lookup data) Public Class LookUpData Public Property ID As Integer ' Key value Public Property Text As String ' text To display In DataGrid (ComboBoxColumn) End Class End Class
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Bearbeitet Peter Fleischer Mittwoch, 20. Januar 2021 17:43
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 25. Januar 2021 12:55
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 3. Februar 2021 11:35
-
Hi Pedro,
auch mit in einem MdiChild funktioniert es problemlos. Bei dir wird wohl an einer anderen Stelle eine Fehler sein. Hier mal meine Demo, einfach in eine leere Form kopieren und diese From als Start-Form eintragen.Imports System.Collections.ObjectModel Public Class Form14 Private Sub Form14_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.IsMdiContainer = True Dim ch As New Child With {.MdiParent = Me} ch.Show() End Sub Public Class Child Inherits Form Private Sub Child_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.Add(dgv) dgv.Columns.Add(New DataGridViewTextBoxColumn _ With {.HeaderText = "Master Info", .DataPropertyName = "MasterInfo"}) dgv.Columns.Add(New DataGridViewComboBoxColumn _ With {.HeaderText = "Lookup Data", .DataPropertyName = "FK", .DataSource = colLookUp, .DisplayMember = "Text", .ValueMember = "ID"}) dgv.DataSource = colData End Sub Private dgv As New DataGridView With {.Dock = DockStyle.Fill, .AutoGenerateColumns = False} Public Sub New() Dim rnd As New Random For i = 1 To 10 colData.Add(New Data With {.FK = rnd.Next(1, 5), .MasterInfo = $"MasterInfo {i}"}) Next For i = 1 To 4 colLookUp.Add(New LookUpData With {.ID = i, .Text = $"Lookup-Text {i}"}) Next End Sub Private colData As New ObservableCollection(Of Data) Private colLookUp As New ObservableCollection(Of LookUpData) ' DataGrid data Public Class Data Public Property FK As Integer ' foreign key value Public Property MasterInfo As String End Class ' ComboBox list data (lookup data) Public Class LookUpData Public Property ID As Integer ' Key value Public Property Text As String ' text To display In DataGrid (ComboBoxColumn) End Class End Class End Class
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 25. Januar 2021 12:55
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 3. Februar 2021 11:35
Alle Antworten
-
Hi,
und was ist der Eigenschaft "DataPropertyName" zugewiesen?--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks -
Hallo.
Ja, ist auch auf
"Bezeichnung_Seriennr"
als auch auf
"Geraete_ID"
eingestellt wordem aber der Eintrag aus der Liste wird dennoch nicht ausgewählt. die combobox ist gefüllt, dennoch wird der Eintrag aus der Tablle
"Geraete_ID"
nicht ausgewählt.
ich abe zusätzlich npoch ersucht die Hintergrundfarbe zu ändern.
.Style.BackColor = System.Drawing.Color.White
aber auch das wird nicht übernommen.
So insgesamt glaube ich nicht das die update Kommandos eine Einfluss haben, aber sie geben auch keinen Fehler
- Bearbeitet PedroLopesdaCosta Mittwoch, 20. Januar 2021 12:39 zusätzliche Informationen
-
Hi,
zur Demo teste mal das folgende Mini-Programm. Einfach in eine leere Form kopieren:Imports System.Collections.ObjectModel Public Class Form13 Private Sub Form13_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.Add(dgv) dgv.Columns.Add(New DataGridViewTextBoxColumn _ With {.HeaderText = "Master Info", .DataPropertyName = "MasterInfo"}) dgv.Columns.Add(New DataGridViewComboBoxColumn _ With {.HeaderText = "Lookup Data", .DataPropertyName = "FK", .DataSource = colLookUp, .DisplayMember = "Text", .ValueMember = "ID"}) dgv.DataSource = colData End Sub Private dgv As New DataGridView With {.Dock = DockStyle.Fill, .AutoGenerateColumns = False} Public Sub New() Dim rnd As New Random For i = 1 To 10 colData.Add(New Data With {.FK = rnd.Next(1, 5), .MasterInfo = $"MasterInfo {i}"}) Next For i = 1 To 4 colLookUp.Add(New LookUpData With {.ID = i, .Text = $"Lookup-Text {i}"}) Next End Sub Private colData As New ObservableCollection(Of Data) Private colLookUp As New ObservableCollection(Of LookUpData) ' DataGrid data Public Class Data Public Property FK As Integer ' foreign key value Public Property MasterInfo As String End Class ' ComboBox list data (lookup data) Public Class LookUpData Public Property ID As Integer ' Key value Public Property Text As String ' text To display In DataGrid (ComboBoxColumn) End Class End Class
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Bearbeitet Peter Fleischer Mittwoch, 20. Januar 2021 17:43
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 25. Januar 2021 12:55
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 3. Februar 2021 11:35
-
-
Hi Pedro,
auch mit in einem MdiChild funktioniert es problemlos. Bei dir wird wohl an einer anderen Stelle eine Fehler sein. Hier mal meine Demo, einfach in eine leere Form kopieren und diese From als Start-Form eintragen.Imports System.Collections.ObjectModel Public Class Form14 Private Sub Form14_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.IsMdiContainer = True Dim ch As New Child With {.MdiParent = Me} ch.Show() End Sub Public Class Child Inherits Form Private Sub Child_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.Add(dgv) dgv.Columns.Add(New DataGridViewTextBoxColumn _ With {.HeaderText = "Master Info", .DataPropertyName = "MasterInfo"}) dgv.Columns.Add(New DataGridViewComboBoxColumn _ With {.HeaderText = "Lookup Data", .DataPropertyName = "FK", .DataSource = colLookUp, .DisplayMember = "Text", .ValueMember = "ID"}) dgv.DataSource = colData End Sub Private dgv As New DataGridView With {.Dock = DockStyle.Fill, .AutoGenerateColumns = False} Public Sub New() Dim rnd As New Random For i = 1 To 10 colData.Add(New Data With {.FK = rnd.Next(1, 5), .MasterInfo = $"MasterInfo {i}"}) Next For i = 1 To 4 colLookUp.Add(New LookUpData With {.ID = i, .Text = $"Lookup-Text {i}"}) Next End Sub Private colData As New ObservableCollection(Of Data) Private colLookUp As New ObservableCollection(Of LookUpData) ' DataGrid data Public Class Data Public Property FK As Integer ' foreign key value Public Property MasterInfo As String End Class ' ComboBox list data (lookup data) Public Class LookUpData Public Property ID As Integer ' Key value Public Property Text As String ' text To display In DataGrid (ComboBoxColumn) End Class End Class End Class
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 25. Januar 2021 12:55
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 3. Februar 2021 11:35