Hallo,
In einem DataSet lese ich Zeilenweise einen Dateiinhalt ein, den ich dann über ein DataGridView ausgebe.
dg_mask.DataSource = pDS
dg_mask.DataMember = "Maske" Den DataGridview soll der Anwender editieren können. Spalten: 6,8,9,15,18,19,21,23 sollen Comboboxen stehen. Die Inhalte der Comboboxen sind variable zu anderen Spalten.
d.h. Klickt der Anwende auf die Spalte 9(Combobox) sollen die Items je nach Abhängikeit von Spalte 6
verschieden gefüllt sein.
Die Anzeige der Combobox Spalte ist einstellig.
Beim Anzeigen der Items der Combobox soll jedoch sowohl der einstellige Text, als auch eine Beschreibung zu sehen sein. Nach der Auswahl, eines Eintrags, muss jedoch wieder die einstellige Anzeige anzeigt werden.
'Einstelliges Zeichen f. Anzeige
mDTcboKlasseKonstante.Columns.Add("Klasse", GetType(System.String))
'Beschreibung des Zeichens
mDTcboKlasseKonstante.Columns.Add("KLB", GetType(System.String))Zu guter Letzt, soll ja auch noch die Itemsauswahl je nach Abhängigkeit von Spalte 6 angezeigt werden.
Bei der Erstellung der Comboboxen:
'Name des Feldes, dessern Wert an den dg_mask.CurrentCell.Value geliefert
' wird
.ValueMember = mDTcboFormat.Columns(0).ColumnName
'Name des Feldes, dessen Wert in der Spalte/Zelle angezeigt wird.
.DisplayMember = mDTcboFormat.Columns(0).ColumnName Ich habe zwar eine Lösung, jedoch erscheint die mir fürchterlich kompliziert.
Ich benötige verschiedene DataTables für jede Combobox.
Beispiel f. 1 Combobox:
Eine DataTable mit allen Itemsinhalten, 6 weitere DataTables mit den jeweils abhängigen Werten.
'DataTable f. Combobox Feldklasse
Private mDTcboKlasseKonstante As New DataTable("Klasse")
Private mDTcboKlasseOutput As New DataTable("Klasse")
Private mdTcboKlasseUpdate As New DataTable("Klasse")
...Beim Befüllen des DataGridviews werden der Combobox alle möglichen Itemsinhalte befüllt, denn sonst kommt es hier zu einer Fehlermeldung.
Klickt der Anwender per Maus auf eine Combobox bzw. Spalte 9 -
wird das Ereignis:
<DataGridview>_EditingControlShowing ausgelöst,
und geprüft, welcher Zellinhalt die Spalte 6 beinhaltet.
Je nachdessen Zellinhalt ('O'/'U'/'K'/'I'...) wird an die Combobox ein anderes DataTable gebunden.
Gleichzeitig, wird der .DisplayMember der DataTabel auf 1 gesetzt, damit die volle Textbeschreibung sichtbar ist.
Private cboGridFormat As ComboBox
Private mDTcboFormat As New DataTable("Format")Private Sub dg_mask_EditingControlShowing ....
'Spalte 8 => Displaymember ändern
If dg_mask.CurrentCellAddress.X = 8 Then
cboGridTyp = DirectCast(e.Control, ComboBox)
cboGridTyp.DisplayMember = mDTcboTyp.Columns(1).ColumnName
End If
If dg_mask.CurrentCellAddress.X = 6 Then
.... DisplayMember ändern
End If
If dg_mask.CurrentCellAddress.X = 9 Then
cboGrid = DirectCast(e.Control, ComboBox)
'je nach Abhängikeit von Spalte 6: andere DataTable zuordnern
If dg_mask.Rows(dg_mask.CurrentRow.Index).Cells("Typ").Value = "O" _
Then
cboGrid.DataSource = mDTcboKlasseOutput
cboGrid.DisplayMember = mDTcboKlasseOutput.Columns( _
1).ColumnName
end if
If dg_mask.Rows(dg_mask.CurrentRow.Index).Cells("Typ").Value = "K" _
Then
cboGrid.DataSource = mDTcboKlasseKonstante
cboGrid.DisplayMember = mDTcboKlasseKonstante.Columns( _
1).ColumnName
end if
If dg_mask.Rows(dg_mask.CurrentRow.Index).Cells("Typ").Value
.....Aber in welchem Ereignis setzt ich die .DisplayMember - Eigenschaft wieder zurück.
Es hat mal ganz kurz geklappt im MouseUp Ereignis, aber jetzt geht es nicht mehr.
Hatte diesen Code im MouseUP ereignis!
Private Sub dg_mask_MouseUp(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs)
If dg_mask.CurrentCellAddress.X = 8 Then
cboGrid.DisplayMember = mDTcboTyp.Columns(0).ColumnName
End If
If dg_mask.CurrentCellAddress.X = 6 and cboGrid IsNot Nothing Then
'Name des Feldes, dessen Wert in der Spalte/Zelle angezeigt
' wird.
cboGrid.DisplayMember = mDTcboFormat.Columns(0).ColumnName
End If
...
End Sub Meine Fragen:
Ist dies wirklich nur so komliziert zu realisieren? oder gibt es einen besseren Weg?
Welches Ereignis soll / muss ich nehmen, damit die DisplayMember Eigenschaft zurückgesezt wird?
Danke |