vb.net 展開程式碼(使排序的程式碼)

只要在datagridview-cellclick那放上此碼 則可對於展開程式碼 排序 前提是 必須先行關閉 DGV的排列

wa14

只要在datagridview-cellclick那放上此碼 則可對於展開程式碼 排序
 
        If e.RowIndex = -1 And e.ColumnIndex >= 0 Then
            DataGridView1.DataSource = scanFuncion2(DataGridView1, DataGridView1.Columns(e.ColumnIndex).DataPropertyName.ToString())
        End If

 

 

Function scanFuncion2(ByVal dgv As DataGridView, ByVal headstr As String)

        '-------------------------------此部分為載入資料至DT

        Dim dt As New DataTable()

        Dim dt2 As New DataTable()

        Dim dc As DataColumn

        Dim w1 As Integer = 0

        '   放入全部標題至DT1

        For id As Integer = 0 To dgv.ColumnCount - 1

            dc = New DataColumn

            dc.ColumnName = dgv.Columns(id).DataPropertyName.ToString()

            dt.Columns.Add(dc)

        Next

        '   把全部的資料放入DT1 或是DT2

        dt2 = dt.Clone

        For ind As Integer = 0 To dgv.Rows.Count - 1

            Dim dr As DataRow

            If IsDBNull(dgv.Rows(ind).Cells(0).Value) Then

                dgv.Rows(ind).Cells(0).Value = ""

            End If

            If dgv.Rows(ind).Cells(0).Value <> "" Then

                '   把全部主表的資料放入DT1

                dr = dt.NewRow()

                For inde As Integer = 0 To dgv.Columns.Count - 1

                    If IsDBNull(dgv.Rows(ind).Cells(inde).Value) Then

                        dr(inde) = ""

                    ElseIf dgv.Rows(ind).Cells(inde).Value = "" Then

                        dr(inde) = ""

                    Else

                        dr(inde) = dgv.Rows(ind).Cells(inde).Value.ToString

                    End If

                Next

                dt.Rows.Add(dr)

                w1 = dgv.Rows(ind).Cells(0).Value.ToString

                '   把全部附表的資料放入DT2

            Else

                dr = dt2.NewRow()

                For inde As Integer = 0 To dgv.Columns.Count - 1

                    If IsDBNull(dgv.Rows(ind).Cells(inde).Value) Then

                        dr(inde) = ""

                    ElseIf dgv.Rows(ind).Cells(inde).Value = "" Then

                        dr(inde) = ""

                    Else

                        dr(inde) = dgv.Rows(ind).Cells(inde).Value.ToString

                        dr(0) = w1

                    End If

                Next

                dt2.Rows.Add(dr)

            End If

        Next

 

        '把DT1的主表資料依照傳依據"排列"

        Dim dv As DataView = dt.DefaultView

        dv.Sort = headstr + " Asc" ''----------------

        Dim dt3 As DataTable = dv.ToTable

 

        '把DT1的主表資料 排列完 然後去DT2搜尋原本跟隨的附表值

        For ix As Integer = 0 To dt3.Rows.Count + dt2.Rows.Count - 1

            If dt3.Rows(ix).Item(0) <> "" Then

                Dim dr As DataRow

                Dim drs() As DataRow = dt2.Select("員工編號='" + dt3.Rows(ix).Item(0) + "'")

                If drs.Length > 0 Then

                    For idx As Integer = 0 To drs.Length - 1

                        dr = dt3.NewRow

                        dr("下屬") = drs(idx)(4)

                        dr("作業") = drs(idx)(5)

                        dt3.Rows.InsertAt(dr, ix + 1)

                        ix += 1

                    Next

                End If

            End If

        Next

        Return dt3

    End Function