只要在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