【问题标题】:How to swap columns in a datagridview如何交换数据网格视图中的列
【发布时间】:2020-08-24 12:31:58
【问题描述】:

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

在表单 1 中,有按钮,当相应的按钮被计时,表单 2 会打开数据网格视图。 使用鼠标将第 1 列与第 2 列交换。 现在,当您关闭表单 2 并单击表单 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

【问题讨论】:

    标签: vb.net datagridview


    【解决方案1】:

    解决方法是...

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

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多