none
Wie funktioniert der DataGridViewButton? RRS feed

  • Frage

  • Ich habe folgenden Plan. Ich möchte, wenn ich z.B. in Zeile 6 den Button klicke, dass dann die ganze Zeile gelöscht wird. Das Problem ist, dass ich nicht weiß, wie ich eine Formel den Buttons zuordnen kann.

    Wenn ich in meinem bereich Column6 -> disposed (das ist das einzige, was da steht) wähle, dann passiert beim klicken auf die Butons einfach nichts.

    Bitte helft mir.

     

    PS.: Ich habe VisualBasic 2008 Express

    • Bearbeitet MaSch0212 Montag, 26. Juli 2010 10:38 Version vergessen
    Montag, 26. Juli 2010 10:38

Antworten

  • Hallo,

    Ich habe folgenden Plan. Ich möchte, wenn ich z.B. in Zeile 6 den Button
    klicke, dass dann die ganze Zeile gelöscht wird. Das Problem ist, dass
    ich nicht weiß, wie ich eine Formel den Buttons zuordnen kann.

    Eine "Formel" musst Du den Buttons nicht zuweisen,
    aber etwas Code in die DataGridView_CellContentClick-
    Ereignisprozedur musst Du schreiben.

    Kopiere das nachfolgende Beispiel in ein leeres Formmodul (Form1.vb)

    Public Class Form1
        Private WithEvents DGV As DataGridView
        Private mDT As DataTable
        Private mDV As DataView

        Private Sub Form1_Load _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs _
                ) Handles MyBase.Load

            ' DataGridView erstellen
            Dim i As Integer
            DGV = New DataGridView
            With DGV
                .Name = "DGV"
                .DefaultCellStyle.Font = New Font("Arial", 16)

                .ColumnHeadersDefaultCellStyle.Font = _
                        New Font("Arial", 8, FontStyle.Bold)

                .Dock = DockStyle.Fill

                .DefaultCellStyle.Padding = _
                        New Padding(6, 4, 6, 4)

                .AutoGenerateColumns = False

                .Columns.Clear()
                i = .Columns.Add("ID", "ID")
                .Columns(i).DataPropertyName = "ID"

                i = .Columns.Add("Text", "Text")
                .Columns(i).DataPropertyName = "Text"

                Dim BC As New DataGridViewButtonColumn

                i = .Columns.Add(BC)
            End With
            Me.Controls.Add(DGV)

            ' DataTable mit DataView erstellen
            CreateData()

            ' DataGridView an DataView (mDV) binden.
            With DGV
                .DataSource = mDV

                .AutoResizeRows()
                .AutoResizeColumns()
                .Columns(2).Width = 90
            End With
        End Sub

        Private Sub CreateData()
            Dim i As Integer
            Dim DR As DataRow
            mDT = New DataTable
            With mDT
                .Columns.Add("ID", GetType(Integer))
                .Columns.Add("Text", GetType(String))

                For i = 1 To 12
                    DR = .NewRow
                    DR.Item(0) = i
                    DR.Item(1) = MonthName(i, False)
                    .Rows.Add(DR)
                Next
                .AcceptChanges()
            End With

            mDV = New DataView(mDT)
        End Sub

        Private Sub DGV_CellContentClick _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.DataGridViewCellEventArgs _
                ) Handles DGV.CellContentClick

            mDV.Item(DGV.CurrentRow.Index).Delete()
        End Sub
    End Class

    Nach dem Programmstart, siehst Du eine Form1 mit einem DataGridView
    mit dem Spalten "ID", "Text" und einer ButtonColumn.

    Bei einem Mausklick auf einen der Buttons in der ButtonColumn wird die
    jeweilige Zeile gelöscht.

    Ein weiteres Beispiel für DataGridView_ButtonColumn findest Du unter

        www.gssg.de -> Visual Basic -> VB.net
            -> DataGridView
                -> DataGridView ButtonColumn

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Dienstag, 27. Juli 2010 07:43
  • Hallo nochmal,

    beim Absenden meiner vorigen Nachricht war ich ein
    wenig zu schnell und habe erst danach bemerkt, dass
    der Code in der Prozedur DGV_CellContentClick()
    unvollständig ist.

    Den Code für DGV_CellContentClick() aus meinem vorigen
    Posting musst Du wie folgt ändern, damit nur beim Click auf den
    Button und nicht auch bei einem Klick auf die anderen
    Columns die jeweilige Zeile gelöscht wird:

        Private Sub DGV_CellContentClick _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.DataGridViewCellEventArgs _
                ) Handles DGV.CellContentClick

            Dim Col As Integer = DGV.CurrentCellAddress.X
            If Col = 2 Then
                mDV.Item(DGV.CurrentRow.Index).Delete()
            End If
        End Sub

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Dienstag, 27. Juli 2010 07:56

Alle Antworten

  • Hallo,

    Ich habe folgenden Plan. Ich möchte, wenn ich z.B. in Zeile 6 den Button
    klicke, dass dann die ganze Zeile gelöscht wird. Das Problem ist, dass
    ich nicht weiß, wie ich eine Formel den Buttons zuordnen kann.

    Eine "Formel" musst Du den Buttons nicht zuweisen,
    aber etwas Code in die DataGridView_CellContentClick-
    Ereignisprozedur musst Du schreiben.

    Kopiere das nachfolgende Beispiel in ein leeres Formmodul (Form1.vb)

    Public Class Form1
        Private WithEvents DGV As DataGridView
        Private mDT As DataTable
        Private mDV As DataView

        Private Sub Form1_Load _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs _
                ) Handles MyBase.Load

            ' DataGridView erstellen
            Dim i As Integer
            DGV = New DataGridView
            With DGV
                .Name = "DGV"
                .DefaultCellStyle.Font = New Font("Arial", 16)

                .ColumnHeadersDefaultCellStyle.Font = _
                        New Font("Arial", 8, FontStyle.Bold)

                .Dock = DockStyle.Fill

                .DefaultCellStyle.Padding = _
                        New Padding(6, 4, 6, 4)

                .AutoGenerateColumns = False

                .Columns.Clear()
                i = .Columns.Add("ID", "ID")
                .Columns(i).DataPropertyName = "ID"

                i = .Columns.Add("Text", "Text")
                .Columns(i).DataPropertyName = "Text"

                Dim BC As New DataGridViewButtonColumn

                i = .Columns.Add(BC)
            End With
            Me.Controls.Add(DGV)

            ' DataTable mit DataView erstellen
            CreateData()

            ' DataGridView an DataView (mDV) binden.
            With DGV
                .DataSource = mDV

                .AutoResizeRows()
                .AutoResizeColumns()
                .Columns(2).Width = 90
            End With
        End Sub

        Private Sub CreateData()
            Dim i As Integer
            Dim DR As DataRow
            mDT = New DataTable
            With mDT
                .Columns.Add("ID", GetType(Integer))
                .Columns.Add("Text", GetType(String))

                For i = 1 To 12
                    DR = .NewRow
                    DR.Item(0) = i
                    DR.Item(1) = MonthName(i, False)
                    .Rows.Add(DR)
                Next
                .AcceptChanges()
            End With

            mDV = New DataView(mDT)
        End Sub

        Private Sub DGV_CellContentClick _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.DataGridViewCellEventArgs _
                ) Handles DGV.CellContentClick

            mDV.Item(DGV.CurrentRow.Index).Delete()
        End Sub
    End Class

    Nach dem Programmstart, siehst Du eine Form1 mit einem DataGridView
    mit dem Spalten "ID", "Text" und einer ButtonColumn.

    Bei einem Mausklick auf einen der Buttons in der ButtonColumn wird die
    jeweilige Zeile gelöscht.

    Ein weiteres Beispiel für DataGridView_ButtonColumn findest Du unter

        www.gssg.de -> Visual Basic -> VB.net
            -> DataGridView
                -> DataGridView ButtonColumn

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Dienstag, 27. Juli 2010 07:43
  • Hallo nochmal,

    beim Absenden meiner vorigen Nachricht war ich ein
    wenig zu schnell und habe erst danach bemerkt, dass
    der Code in der Prozedur DGV_CellContentClick()
    unvollständig ist.

    Den Code für DGV_CellContentClick() aus meinem vorigen
    Posting musst Du wie folgt ändern, damit nur beim Click auf den
    Button und nicht auch bei einem Klick auf die anderen
    Columns die jeweilige Zeile gelöscht wird:

        Private Sub DGV_CellContentClick _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.DataGridViewCellEventArgs _
                ) Handles DGV.CellContentClick

            Dim Col As Integer = DGV.CurrentCellAddress.X
            If Col = 2 Then
                mDV.Item(DGV.CurrentRow.Index).Delete()
            End If
        End Sub

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Dienstag, 27. Juli 2010 07:56
  • Hallo Peter,

    Du kannst Deine Beiträge auch nach dem Absenden über das Webfrontend nachträglich bearbeiten. Vielleicht fügst Du Deine Korrektur noch in den ersten Beitrag ein, damit das Beispiel vollständig ist.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Samstag, 31. Juli 2010 16:05
    Moderator