订单在vb.net中所选行的复制粘贴中发生了变化

时间:2017-03-18 10:08:41

标签: vb.net datagridview

我写了下面的代码,只将选定的datagridview行放入剪贴板文本。

`

            Dim ClipBoardBuilder As New StringBuilder()

            For Each row As DataGridViewRow In MyRows
                For Each Column As DataGridViewColumn In dgv1.Columns
                    If Column.Visible = True Then ClipBoardBuilder.Append(row.Cells(Column.DisplayIndex).FormattedValue.ToString() + vbTab)
                Next
                ClipBoardBuilder.AppendLine()
            Next

            If dgv1.GetClipboardContent() IsNot Nothing Then Clipboard.SetText(ClipBoardBuilder.ToString())


            Dim ClipBoardText as string = Clipboard.GetText()

`

但是在网格中粘贴时,所选行的顺序会发生变化。 例如 row1 - A1 B1 C1 row2 - A2 B2 C2 row3 - A3 B3 C3 然后在夹板中,它显示为与下面相反,并粘贴在网格中,如下所示 row3 - A3 B3 C3 row2 - A2 B2 C2 row1 - A1 B1 C1 如何在网格粘贴时将订单序列作为原始序列。

提前致谢....

3 个答案:

答案 0 :(得分:0)

您可以对gridview进行排序。

float diffuseCoefficient = max( 1.0 - (distance(pointLights[i].position,ligVPosition) / plDistance), 0.0)

答案 1 :(得分:0)

在这里,我将遍历选定的行,所选行将以所选的顺序排列。

如果用户选择第1行,则选择第3行,然后选择第2行。在这种情况下,所选行将按照行收集装置中的选择顺序存在 第一排 第3排 第二行

所以当我使用字符串构建器处理剪贴板时,它会按照所选的序列顺序进行复制,但不会按照构建行索引顺序进行复制

因此,在迭代之前,我按照下面的方式对所选行进行排序。

Dim dgvRows As List(Of DataGridViewRow) = (From c As DataGridViewRow In dgv1.SelectedRows.Cast(Of DataGridViewRow)() Select c Order By c.Index).Cast(Of DataGridViewRow)().ToList

现在它只按所需顺序粘贴。

答案 2 :(得分:0)

我猜测DataGridView所选行的组织方式存在混淆。 SelectedRows会返回DataGridViewSelectedRowCollection。正如您所注意到的那样,此集合的顺序是LAST选定行位于集合中的索引零(0)处,而FIRST选定行位于集合的LAST索引处。

如果你想获得用户选择行的原始订单,你可以反转集合,或者你可以简单地循环从最后一个索引到第一个索引的集合。这将获得用户选择行的原始订单。

请记住,您不能假设用户会以自上而下的方式选择行。用户可以选择第2行,然后第9行,第4行,第3行。根据您的操作,这可能是可以接受的,但是如果要删除所选行,则需要对集合进行排序,使得行按连续顺序排列。由于不清楚您对这些选定行的操作,我将假设删除行不是您正在做的。

以下是如何获取所选行的原始顺序的简单示例。注意:SelectionMode的{​​{1}}应设置为DataGridView。希望这可以解决问题。

enter image description here

FullRowSelect

结束班