问题描述
我的目的是允许用户拖放列。
在表格1中,有一个按钮,当为各个按钮计时时,表格2随即打开datagridview。 使用鼠标将第1列与第2列交换。 现在,当您关闭form2并单击在窗体1上的按钮时,窗体2应该与已更改的列一起出现。
我尝试了什么?
- 我试图保存被移动列的列索引和与其交换列的列的索引。
- 我不确定是否应在单击按钮后将更改后的列详细信息从子表单携带到父表单,再将父表单携带到子表单。
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
解决方法
解决方法是...
- 将列的顺序存储在设置中。例如:0123 54 6
- 编写一个例程,根据存储的设置数据对datagrid列重新排序
- 每次交换列时都会更新设置数据。