Announcement

Collapse
No announcement yet.

DataGridView und Combobox

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataGridView und Combobox

    Hallo,

    ich habe ein Problem mit dem Verhalten einer Combobox in einem DataGridView.
    Die Combobox erstelle ich mit folgendem Code:

    Dim dgCmbISBN As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn
    ' Datentyp der Spaltenwertes is Integer
    dgCmbISBN.ValueType = GetType(Integer)
    ' Beschriftung Spaltenkopf
    dgCmbISBN.HeaderText = "ISBN"
    ' Name des Feldes an welches die Spalte gebunden wird
    dgCmbISBN.DataPropertyName = "TitelNr"
    'jetzt Laden des Combofeldes über eine eigene Klasse
    Dim cmbISBN As New FillDataGridComboBox
    cmbISBN.ComboFill(dgCmbISBN, "Select TitelNr,ISBN from Titel Order by ISBN", "ISBN", "TitelNr")
    dgCmbISBN.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
    'dgCmbISBN.
    ' nur akt. Zelle als Combobox darstellen
    dgCmbISBN.DisplayStyleForCurrentCellOnly = True

    Soweit funktioniert alles, aber die Benutzerfreundlichkeit gefällt mir nicht.

    Wie kann ich das gleiche Verhalten der Combobox im DGV erreichen wie in einer "normalen" Combobox
    mit den Eigenschaften:

    AutoCompleteMode = SuggestAppend

    Ich möchte also, dass in der Combobox nach Eingabe von 1 bis x Zeichen sofort die zulässigen Werte
    angezeigt werden. Mit dem Obigen Code reagiert die Combobox nur auf das 1. Zeichen. Da viele ISBN-Nummern
    mit dem gleichen Wert beginnen, ist dies nicht wirklich hilfreich bei der Auswahl.

    Vielen Dank für die Hilfe

    echino

  • #2
    Hallo,

    das Problem liegt darin, dass eine nicht aktive Zelle nur zur Anzeige benutzt wird und dann im Prinzip nichts anders aussieht als eine TextBox (vielleicht noch - je nach Einstellung - mit dem Pfeil). Erst dann, wenn die Zelle aktiv wird, wird sie zu einer "echten" ComboBox; und es gibt für das ganze DataGridView nur eine einzige solche "echte" ComboBox.

    Du musst deshalb den Moment des "Aktiv-Werdens" benutzen, dazu dient das Ereignis EditingControlShowing. Die dadurch aktive ComboBox ist ein DataGridViewComboBoxEditingControl, und dort gibt es die gewünschten Eigenschaften.

    Du kannst Dich am Beispiel in der SDK-Doku zu diesem EditingControl orientieren.

    Jürgen

    PS. Bitte markiere Code-Abschnitte mit dem #-Button; das liest sich besser.

    Comment


    • #3
      Hallo,

      vielen Dank für den Hinweis. Es funktioniert. Aber 1 Problem habe ich noch: Gibt es eine Eigenschaft, die dem User mehr Zeit lässt, einen Wert in der Combobox einzutragen? Im Moment wird nach Eingabe eines Zeichens und einer Wartezeit von weit weniger als 1 Sekunde vor der Eingabe des 2. Zeichens der ausgewählte Wert in der Combobox wieder von vorne abgefragt.
      Beispiel:
      Werte in der Combobox:
      8888
      98-4-3
      98-4-5
      Nach Eingabe von "9" wird der Wert "98-4-3" angezeigt. Nach der weiteren Eingabe von "8" erscheint aber "8888" und nicht weiter "98-4-3". Nur wenn ich ganz schnell die Zeichen eingebe, komme ich zu dem Wert "98-4-5". So schnell ist kein User! Und bei mehr als 5000 Werten nicht hilfreich.

      Hier der Code:
      Code:
          Private Sub dgBestellung_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgBestellung.EditingControlShowing
              If (TypeOf e.Control Is DataGridViewComboBoxEditingControl) Then
      
                  Dim cmb As DataGridViewComboBoxEditingControl = CType(e.Control, DataGridViewComboBoxEditingControl)
      
                  If Not cmb Is Nothing Then
      
                      cmb.AutoCompleteMode = AutoCompleteMode.SuggestAppend
                      cmb.AutoCompleteSource = AutoCompleteSource.ListItems
                      cmb.UseWaitCursor = True
      
                  End If
      
              End If
          End Sub
      Gibt es dazu eine einfache Eigenschaft, die den Wert nicht immer wieder zurücksetzt, wie in einer Standard-Combobox?

      Danke für die Info.

      Comment


      • #4
        Hallo echino,

        versuch doch mal diese Einstellung:

        DropDownStyle: DropDownList (<- Den hier habe ich in verdacht, das der bei Dir anders aussieht)

        Gruß Womble

        Comment

        Working...
        X