【问题标题】:Reversing the way rows get entered into a data table反转行进入数据表的方式
【发布时间】:2013-07-10 14:51:45
【问题描述】:

我有一个函数可以让我选择数据表的行并跟踪我选择的行。但是,当它返回另一个数据表时,它会输入我向后选择的行。

因此,如果我在返回数据表时选择行 1,2,3,则行显示为 3,2,1 这是函数:

Private Function getCoordinates()
    Dim dt As New DataTable
    Dim dt2 As New DataTable
    Dim r As DataRow
    Dim n As Integer
    Dim selectedItems As DataGridViewSelectedRowCollection = dgv.SelectedRows

    dt = dgv.DataSource
    dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    dgv.MultiSelect = True

    dt2.Columns.Add("Command")
    dt2.Columns.Add("Position")

    Try
        If selectedItems Is Nothing Then
            For n = 0 To dt.Rows.Count - 1
                r("Command") = dt.Rows.Item(n)("Mouse Command")
                r("Position") = dt.Rows.Item(n)("Mouse Position")
                dt2.Rows.Add(r)
            Next

        Else
            For Each selectedItem As DataGridViewRow In selectedItems

                Dim MouseIndex = Convert.ToString(selectedItem.Cells(0).Value)
                Dim CoordIndex = Convert.ToString(selectedItem.Cells(1).Value)
                r = dt2.NewRow()
                r("Command") = MouseIndex
                r("Position") = CoordIndex
                dt2.Rows.Add(r)

            Next
        End If

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

    Return dt2

End Function

Wsa 只是想知道我将如何做到这一点,这样行就不会像现在这样颠倒了。

【问题讨论】:

  • 如果selectedItems Is Nothing 你会得到一个异常,因为你使用r 这是一个未初始化的DataRow

标签: vb.net datatable


【解决方案1】:

或者只是向后循环:

For i As Integer = selectedItems.Count - 1 To 0 Step -1
  Dim selectedItem As DataGridViewRow = selectedItems(i)
  '...
Next

【讨论】:

  • 我想到了那个解决方案,但是如果他按 2、1、3 的顺序选择行会发生什么?
  • 我从没想过要这样做……你太棒了!
  • @tezzo:嗯,我认为 OP 可以接受。根据问题,问题在于顺序是向后的,而不是顺序与记录的逻辑顺序不完全匹配。所以我认为解决方案是手动反转顺序。我为你的回答 +1 了。
  • @Neolisk,你是对的!我把注意力放在记录的逻辑顺序上,但没有明确要求!
【解决方案2】:

来自social.msdn.microsoft.com forum

第一个选定的 DataGridViewRow 列在 DataGridView 的 SelectedRows 集合的最后一项中。此行为是设计使然。

您可以循环每个 DataGridViewRow 并仅在选中时将其复制到 DataTable 中。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多