如何在DataGridView中交换列

问题描述

我的目的是允许用户拖放列。

在表格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

解决方法

解决方法是...

  1. 将列的顺序存储在设置中。例如:0123 54 6
  2. 编写一个例程,根据存储的设置数据对datagrid列重新排序
  3. 每次交换列时都会更新设置数据。