vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Combobox im DataGridview abhängig von anderen Cellinhalten befüllen 
Autor: jasmina
Datum: 31.07.09 17:13

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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Combobox im DataGridview abhängig von anderen Cellinhalten b...3.133jasmina31.07.09 17:13
Re: Combobox im DataGridview abhängig von anderen Cellinhalt...1.911ModeratorDaveS31.07.09 17:45
Re: Combobox im DataGridview abhängig von anderen Cellinhalt...2.052jasmina03.08.09 09:03

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 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