如何在数据网格视图中交换列



我的意图是允许用户拖放列。

在表单1中,有一个按钮,当相应的按钮被计时时,表单2将打开datagridview。使用鼠标将列1与列2交换。现在,当您关闭表单2并点击表单1上的按钮时,表单2应该会显示更改后的列。

我试了什么?

  • 我试图在columnsorder中保存被移动的列的列索引和与其交换的列的索引
  • 我不确定如何将更改后的列详细信息从子窗体传递到父窗体,并在单击按钮后再次从父窗体传递到子窗体
Public Class Form2
Public ctlDataGridDirect As System.Windows.Forms.DataGridView
Public columnOrder As New List(Of ColumnOrderItem)
Public ColumnChanged As Boolean = False
Public NotInheritable Class ColumnOrderItem
Public Property DisplayIndex As Integer
Public Property ColumnIndex As Integer
End Class
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ctlDataGridDirect = Me.ctlDataGrid
ctlDataGridDirect.ClipboardCopyMode = Windows.Forms.DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText
With ctlDataGrid
.AllowUserToAddRows = False
.RowHeadersVisible = False
End With
ctlDataGrid.Rows.Add()
ctlDataGrid.Rows(0).Cells("Column1").Value = Trim(0)
ctlDataGrid.Rows(0).Cells("Column2").Value = Trim(1)
ctlDataGrid.Rows(0).Cells("Column3").Value = Trim(2)
ctlDataGrid.Rows(0).Cells("Column4").Value = Trim(3)
If ColumnChanged = True Then
For i = 0 To columnOrder.Count - 1
Next
End If
End Sub
Private Sub ctlDataGrid_ColumnDisplayIndexChanged(sender As Object, e As DataGridViewColumnEventArgs) Handles ctlDataGrid.ColumnDisplayIndexChanged
ColumnChanged = True
End Sub
Private Sub SaveColumnOrder(Datagridview As DataGridView)
Dim columns As DataGridViewColumnCollection = ctlDataGrid.Columns
For i = 0 To columns.Count - 1
columnOrder.Add(New ColumnOrderItem With {.ColumnIndex = i, .DisplayIndex = columns(i).DisplayIndex})
Next
End Sub
Private Sub Form2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
SaveColumnOrder(ctlDataGrid)
End Sub
End Class
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form2.Show()
End Sub
End Class

解决方案是…

  1. 将列的顺序存储在设置中。示例:0123546
  2. 编写一个例程,根据存储的设置数据对数据网格列进行重新排序
  3. 每次交换列时更新设置数据

最新更新