DataGridView mit Combobox

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von J.Herbrich.

    DataGridView mit Combobox

    Hallo zusammen,

    ich habe mal eine Frage:

    Ist es möglich in einer SQL-Abfrage gleichzeitig eine Combobox zu erstellen. Ich habe eine SQL-Datentabelle und eine Spalte dieser Datentabelle soll in der DatagridView als Combobox dargestellt werden. Die Auswahlmöglichkeiten der Combobox kommen aus einer zweiten Datentabelle.

    Bisher habe ich es so gemacht, dass ich die Combobox erst nach dem erstellen der DataGridView gesondert als unverknüpfte Combobox angelegt habe und mit einer gesonderten SQL-Abfrage gefüllt habe. Hierbei ist allerdings das Problem, dass ich die in der Vergangenheit ausgewählten Werte nicht mit reingeladen bekomme.

    Ich danke euch für eure Hilfe!

    Gruß
    Dominik

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Schau dir mal die Tutorials vom
    home.arcor.de/eckardahlers/Pro…r/Downloadpage/index.html
    Insbesondere den Joining-View!
    "...Für jede Spalte, die aus der übergeordnete Tabelle anzuzeigen ist, wird dem DGV eine DatagridViewComboboxColumn zugefügt, deren Auswahlfeld die Werte einer Spalte der übergeordneten Tabelle anbietet...."
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Hallo zusammen,

    vielen Dank für die Hilfe. Die Lösung scheint erstmal zu funktionieren. Habe aber noch eine weitere Frage:

    Wenn ich ein Ereignis ausführen will wenn ein Wert in der Combobox ausgewählt wird, funktioniert dieses auch. Allerdings wenn ich dann in eine andere Combobox springen will kommt ein Fehler:

    "Fehler beim konvertieren des vachar-Wertes in den int-Datentyp."

    Der code hierzu ist wie folgt:

    Quellcode

    1. Private Sub TblProjectTypeDataGridView_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles TblProjectTypeDataGridView.EditingControlShowing
    2. Dim combo As ComboBox = CType(e.Control, ComboBox)
    3. If (combo IsNot Nothing) Then
    4. ' Remove an existing event-handler, if present
    5. RemoveHandler combo.SelectedIndexChanged, _
    6. New EventHandler(AddressOf cboxProjectType_SelectedIndexchanged)
    7. ' Add the event handler.
    8. AddHandler combo.SelectedIndexChanged, _
    9. New EventHandler(AddressOf cboxProjectType_SelectedIndexchanged)
    10. End If
    11. combo = Nothing
    12. End Sub


    Quellcode

    1. Private Sub cboxProjectType_SelectedIndexchanged(ByVal sender As Object, ByVal e As EventArgs)
    2. Dim ComBo_Select As ComboBox = CType(sender, ComboBox)
    3.  
    4. msgbox (CType(ComBo_Select, ComboBox).SelectedValue.ToString())
    5. End Sub


    Hat jemand eine Idee, warum diese Code nur einmal durchlaufen werden kann? Oder kann man das Event beim Verlassen der Combobox nicht ausführen lassen????
    Wenn das aus den Anleitungen von @ErfinderDesRades ist, wird der sicher gern auch helfen ^^
    In welcher Codezeile willer denn was böses?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Bei der Ausgabe der MsgBox in Codezeile 6 findet er beim ersten durchlauf den Rowindex. Beim zweiten Durchlauf findet er leider keinen Rowindex mehr sondern gibt System.DataGridView.DataGridRow zurück. Dadurch fällt er bei der SQL-Abfrage, welche an der Stelle der MsgBox stehet auf die Nase.

    Dieser Code mit den Änderungen der MsgBox ist nicht von @ErfinderDesRades sondern selbst erstellt. Er fängt in seinem Beispiel nicht das Event Combobox ab.

    Vielen DAnk für die Hilfe
    Also so allgemein würd ich erstmal den Verweis von Microsoft.Visual.Basic entfernen. Dann wirst vor vielen unschönen Funktionen geschützt ^^
    PS: Wenn du da nen neues SQL Event feuerst deutet das schon auf ein kleines Fehldesign hin.
    CType... ist nu auch nicht das was ich nutzen würde.
    Warum Castest du eine Combobox in eine Combobox? Du hast ja direkt darüber schon den Sender in eine Combobox gecastet.

    Wieso removest du einen NEW Eventhandler? Müsste da nicht schon einer sein den du removen willst?

    EDIT: Hast du abgefangen, dass auch eine DGV-Zelle aktiv sein könnte, die keine ComboBox ist? Also ne Abfrage des Typen des Senders bevor er gecastet wird?

    EDIT2: Bei mir tut das was es soll (augenscheinlich):

    VB.NET-Quellcode

    1. ​Private Sub DataGridView1_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
    2. If Not TypeOf (e.Control) Is ComboBox Then Return
    3. Dim combo As ComboBox = DirectCast(e.Control, ComboBox)
    4. If (combo IsNot Nothing) Then
    5. ' Remove an existing event-handler, if present
    6. RemoveHandler combo.SelectedIndexChanged, AddressOf cboxProjectType_SelectedIndexchanged
    7. ' Add the event handler.
    8. AddHandler combo.SelectedIndexChanged, _
    9. New EventHandler(AddressOf cboxProjectType_SelectedIndexchanged)
    10. End If
    11. End Sub
    12. Private Sub cboxProjectType_SelectedIndexchanged(ByVal sender As Object, ByVal e As EventArgs)
    13. Dim ComBo_Select As ComboBox = DirectCast(sender, ComboBox)
    14. MessageBox.Show(ComBo_Select.Text.ToString())
    15. End Sub
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    Ja es ist möglich, du kannst in einen Template Field eines DataGrid View eine Combobox einbauen, und du kannst du wen du willst dieses außerhalb der DataGrid Area plazieren. Binden kannst du es über jede Datenquelle. Eine Binding Soruce giebt es in ASP.NET webForms / ASP.NET leider nicht.

    LG, J. Herbrich