Combobox in DGV Zelle

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Maltur.

    Combobox in DGV Zelle

    Hallo zusammen,

    ich bin wieder an einem Punkt an dem ich nicht weiter komme und hoffe Ihr könnt mir etwas weiter helfen.

    In meiner DGV ist in der letzten Spalte (Spalte 8) aber in jeder Zeile ein Button. Nun möchte ich, wenn ich auf den Button in z.B. Zeile 5 klicke, dass NUR in der Zeile 5 und Spalte 5 eine Combobox erscheint und sonst in keiner anderen Zeile oder Spalte.

    Ich hoffe, ich konnte es einigermaßen verständlich erklären. Ich bin Anfänger und würde mich über ein Codebeispiel freuen.


    Viele Grüße
    @Maltur Wenn Du ein Anfänger bist, geht das so nicht.
    Das DGV bietet Spalten mit ComboBoxen an, nicht aber einzelne Zellen.
    Was Du machen kannst, einen randlosen Dialog bauen mit genau Deiner ComboBox, den Du dann an genau Deiner gewünschten Position darstellst.
    Feddich.
    Wenn Du fertigen Code haben willst, geh in das unterforum Marktplatz und mach ein Angebot.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bin Anfänger und würde mich über ein Codebeispiel freuen.


    Bitteschön...

    Form

    VB.NET-Quellcode

    1. Public Class frmPersonView
    2. Private GenderList As List(Of String)
    3. Private PersonList As List(Of Person)
    4. Private Sub Jahresansicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. FormatDatagrid()
    6. GenderList = New List(Of String) From {"Männlich", "Weiblich", "Divers"}
    7. PersonList = New List(Of Person) From {New Person With {.ID = 1, .Firstname = "Max", .Lastname = "Mustermann", .DateOfBirth = New Date(2000, 1, 1), .Gender = "Männlich"},
    8. New Person With {.ID = 2, .Firstname = "Sabine", .Lastname = "Mustermann", .DateOfBirth = New Date(1999, 12, 31), .Gender = "Weiblich"},
    9. New Person With {.ID = 3, .Firstname = "Kim", .Lastname = "Mustermann", .DateOfBirth = New Date(1995, 7, 15), .Gender = "Divers"}}
    10. dgvExample.DataSource = PersonList
    11. End Sub
    12. Private Sub FormatDatagrid()
    13. dgvExample.Columns.Clear()
    14. dgvExample.DataSource = Nothing
    15. dgvExample.AutoGenerateColumns = False
    16. dgvExample.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
    17. dgvExample.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
    18. dgvExample.AllowUserToResizeColumns = True
    19. dgvExample.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
    20. dgvExample.AllowUserToAddRows = False
    21. dgvExample.AllowUserToDeleteRows = False
    22. dgvExample.RowHeadersVisible = False
    23. dgvExample.SelectionMode = DataGridViewSelectionMode.CellSelect
    24. dgvExample.MultiSelect = False
    25. Dim TextStyle As New DataGridViewCellStyle With {.Alignment = DataGridViewContentAlignment.MiddleCenter}
    26. Dim IntStyle As New DataGridViewCellStyle With {.Alignment = DataGridViewContentAlignment.MiddleCenter, .Format = "#0"}
    27. Dim NumberStyle As New DataGridViewCellStyle With {.Alignment = DataGridViewContentAlignment.MiddleCenter, .Format = "#0.00"}
    28. Dim DateStyle As New DataGridViewCellStyle With {.Alignment = DataGridViewContentAlignment.MiddleCenter, .Format = "dd.MM.yyyy"}
    29. Dim Timestyle As New DataGridViewCellStyle With {.Alignment = DataGridViewContentAlignment.MiddleCenter, .Format = "HH:mm:ss"}
    30. Dim DateTimestyle As New DataGridViewCellStyle With {.Alignment = DataGridViewContentAlignment.MiddleCenter, .Format = "dd.MM.yyyy HH:mm:ss"}
    31. dgvExample.Columns.Add(New DataGridViewTextBoxColumn With {.Name = "ID", .HeaderText = "Nummer", .DataPropertyName = "ID", .DefaultCellStyle = IntStyle, .Visible = True, .ReadOnly = True, .Width = 50})
    32. dgvExample.Columns.Add(New DataGridViewTextBoxColumn With {.Name = "Firstname", .HeaderText = "Vorname", .DataPropertyName = "Firstname", .DefaultCellStyle = TextStyle, .Visible = True, .ReadOnly = True, .Width = 200})
    33. dgvExample.Columns.Add(New DataGridViewTextBoxColumn With {.Name = "Lastname", .HeaderText = "Nachname", .DataPropertyName = "Lastname", .DefaultCellStyle = TextStyle, .Visible = True, .ReadOnly = True, .Width = 200})
    34. dgvExample.Columns.Add(New DataGridViewTextBoxColumn With {.Name = "DateOfBirth", .HeaderText = "Geburtsdatum", .DataPropertyName = "DateOfBirth", .DefaultCellStyle = DateStyle, .Visible = True, .ReadOnly = True, .Width = 100})
    35. dgvExample.Columns.Add(New DataGridViewTextBoxColumn With {.Name = "Gender", .HeaderText = "Geschlecht", .DataPropertyName = "Gender", .DefaultCellStyle = TextStyle, .Visible = True, .ReadOnly = True, .Width = 100})
    36. dgvExample.Columns.Add(New DataGridViewButtonColumn With {.Name = "Edit", .HeaderText = "Bearbeiten", .DataPropertyName = "Edit", .DefaultCellStyle = TextStyle, .Visible = True, .FlatStyle = FlatStyle.Flat, .Width = 100})
    37. End Sub
    38. Private Sub dgvExample_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgvExample.EditingControlShowing
    39. If dgvExample.CurrentCell.OwningColumn.Name = "Gender" Then
    40. Dim cmb As ComboBox = TryCast(e.Control, ComboBox)
    41. If cmb IsNot Nothing Then
    42. TryCast(dgvExample.CurrentCell.OwningRow.DataBoundItem, Person).Gender = CStr(cmb.SelectedValue)
    43. End If
    44. End If
    45. End Sub
    46. Private Sub dgvExample_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvExample.CellContentClick
    47. If dgvExample.Columns(e.ColumnIndex).Name = "Edit" Then
    48. Dim Btn = TryCast(dgvExample.Rows(e.RowIndex).Cells(e.ColumnIndex), DataGridViewButtonCell)
    49. Dim RIndex As Integer = 0
    50. Dim CIndex As Integer = 0
    51. Dim TextStyle As New DataGridViewCellStyle With {.Alignment = DataGridViewContentAlignment.MiddleCenter}
    52. Dim cmbCell As New DataGridViewComboBoxCell With {.FlatStyle = FlatStyle.Flat, .DataSource = GenderList, .Value = TryCast(dgvExample.Rows(e.RowIndex).DataBoundItem, Person).Gender, .DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton}
    53. Dim tbCell As New DataGridViewTextBoxCell With {.Value = TryCast(dgvExample.Rows(e.RowIndex).DataBoundItem, Person).Gender, .Style = TextStyle}
    54. If CStr(Btn.Value) = "Bearbeiten" Then
    55. Btn.Value = "Fertig"
    56. For Each C As DataGridViewCell In dgvExample.Rows(e.RowIndex).Cells
    57. C.ReadOnly = False
    58. If C.OwningColumn.Name = "Gender" Then
    59. RIndex = C.RowIndex
    60. CIndex = C.ColumnIndex
    61. End If
    62. Next
    63. dgvExample.Rows(RIndex).Cells(CIndex) = cmbCell
    64. Else
    65. Btn.Value = "Bearbeiten"
    66. For Each C As DataGridViewCell In dgvExample.Rows(e.RowIndex).Cells
    67. C.ReadOnly = True
    68. If C.OwningColumn.Name = "Gender" Then
    69. RIndex = C.RowIndex
    70. CIndex = C.ColumnIndex
    71. End If
    72. Next
    73. dgvExample.Rows(RIndex).Cells(CIndex) = tbCell
    74. End If
    75. End If
    76. End Sub
    77. End Class



    Zusatzklasse

    VB.NET-Quellcode

    1. Public Class Person
    2. Public Property ID As Integer
    3. Public Property Firstname As String
    4. Public Property Lastname As String
    5. Public Property DateOfBirth As Date
    6. Public Property Gender As String
    7. Public Property Edit As String = "Bearbeiten"
    8. End Class



    Aber @RodFromGermany hat Recht, wenn du Anfänger bist, dann wird das eine ganze Weile dauern, bis du verstehst was da passiert.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

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