none
ungebundenes Datagridview nach 2 Spalten sortieren (Multicolumn) RRS feed

  • Frage

  • Hallo Leute,

    ich habe ein Datagridview mit 4 Spalten, die letzte ist ein Ja/Nein-Feld. Wenn ich jetzt diese anklicke, dann soll auch automatisch eine andere Spalte für die Sortierung mit berücksichtigt werden.

    Die Reihenfolge soll dabei wie folgt sein:

    1. colBescheid (J/N) => wechselweise auf bzw. absteigend
    2. colSendedatum (Datum)  => immer absteigend

    Wie bekomme ich das hin?

        Private Sub dgvSteuer_ColumnHeaderMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvSteuer.ColumnHeaderMouseClick
            If e.ColumnIndex = dgvSteuer.ColumnCount - 1 Then
                Dim sortColumn As DataGridViewColumn
    
                sortColumn = dgvSteuer.Columns("colBescheid")
                dgvSteuer.Sort(sortColumn, System.ComponentModel.ListSortDirection.Ascending)
    
                sortColumn = dgvSteuer.Columns("colSendedatum")
                dgvSteuer.Sort(sortColumn, System.ComponentModel.ListSortDirection.Ascending)
    
                Me.Refresh()
            End If
        End Sub

    Ich komme hier einfach nicht weiter.

    Vielen Dank im Voraus.

    Gruß Ahmed

    Montag, 23. Oktober 2017 15:57

Antworten

  • Hallo Leute,

    soweit ich es verstanden habe, kann man ein Datagridview nicht nach mehreren Spalten sortieren.

    Deshalb gibt es die Lösung, indem man eine Tabelle verwendet und diese an das Datagridview bindet. Die Tabelle kann dabei nach mehreren Spalten sortiert werden.

    Hier meine Lösung:

         Dim table = New System.Data.DataTable()

        Private Sub btnSearch_Click(sender As System.Object, e As System.EventArgs) Handles btnSearch.Click
            Dim iJahr As Integer = txtJahr.Text
            Dim sSteuer As String = cmbSteuerArt.Text
            Dim sPath = My.Settings.Pfad_RoseSoft & "\"
            Dim sResultPath As String
            Dim iMdNr As Integer, sMdName As String
            Dim SearchPattern As String = ""
            Dim blnBescheid As Boolean = False

            table.Columns.Add("MdNr", GetType(Integer))
            table.Columns.Add("MdName", GetType(System.String))
            table.Columns.Add("Jahr", GetType(Integer))
            table.Columns.Add("Sendedatum", GetType(Date))
            table.Columns.Add("Bescheid", GetType(System.Boolean))

            SearchPattern = cmbSteuerArt.Text.ToString & "*" & iJahr & "*Formulare*.pdf"

            Dim oDir As New System.IO.DirectoryInfo(sPath)
            Dim oFiles As System.IO.FileInfo() = oDir.GetFiles(SearchPattern, SearchOption.AllDirectories)  'oDir.GetFiles(sSteuer & "*" & iJahr & "*Formulare*.pdf", SearchOption.AllDirectories)
            Dim oFile As System.IO.FileInfo


            For Each oFile In oFiles
                iMdNr = oFile.DirectoryName.Substring(oFile.DirectoryName.LastIndexOf("_") + 1, (oFile.DirectoryName.Length - oFile.DirectoryName.LastIndexOf("_")) - 1)
                sMdName = FindName(iMdNr)
                sResultPath = CombinePaths(oFile.DirectoryName, sSteuer & ". " & iJahr) & "\"
                If IO.Directory.Exists(sResultPath) Then
                    blnBescheid = (Directory.GetFiles(sResultPath, "*Bescheid*.pdf").Length > 0)
                End If
                'dgvSteuer.Rows.Add(iMdNr, sMdName, iJahr, oFile.CreationTime, blnBescheid)
                table.Rows.Add(iMdNr, sMdName, iJahr, oFile.CreationTime, blnBescheid)
            Next
            table.DefaultView.Sort = "Bescheid, Sendedatum"
            dgvSteuer.DataSource = table

        End Sub

    Und im ColumnHeader dann einfach wie folgt:

       Private Sub dgvSteuer_ColumnHeaderMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvSteuer.ColumnHeaderMouseClick
    
            If e.ColumnIndex = dgvSteuer.ColumnCount - 1 Then
                table.DefaultView.Sort = "Bescheid, Sendedatum"
                dgvSteuer.DataSource = table
            End If
        End Sub
    Damit kann jetzt jede Spalte einzeln und nur die letzte Spalte wird immer zusammen mit einer anderen sortiert.

    Das funktioniert soweit ich es sehen konnte, einwandfrei.

    Gruß Ahmed


    • Als Antwort markiert Ahmed Martens Montag, 23. Oktober 2017 17:58
    • Bearbeitet Ahmed Martens Montag, 23. Oktober 2017 18:00 Nachtrag
    Montag, 23. Oktober 2017 17:43