我写了下面的代码,只将选定的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
如何在网格粘贴时将订单序列作为原始序列。
提前致谢....
答案 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
。希望这可以解决问题。
FullRowSelect
结束班