【问题标题】:Paste information from program to datagridview将信息从程序粘贴到 datagridview
【发布时间】:2019-04-20 18:07:53
【问题描述】:

在工作中,我们使用程序来匹配某些数据。我目前正在研究一种解决方案来获取这些匹配项并将它们插入数据库中。但为了做到这一点,我希望将匹配结果显示在 datagridview 中。到目前为止,我尝试使用来自this awnser 的代码。

我遇到的问题是,当我从匹配程序中粘贴数据时,它只设置了 5 列,而它需要设置为 7。这是由于最后两个单元格的事实引起的第一行没有数据。

很遗憾,我无法更改复制到剪贴板的数据,因此我必须相应地更改我的粘贴代码。

我目前使用的代码如下:

    Const tab As Char = ChrW(9)
    Const lineFeed As Char = ChrW(10)
    Const carriageReturn As Char = ChrW(13)

    Dim generate As Boolean = True

    For Each line As String In Clipboard.GetText.Split({lineFeed, carriageReturn}, StringSplitOptions.None)

        Dim values() As String = line.Trim.Split({tab})

        If (generate) Then
            For cell As Integer = 0 To (values.Length - 1)
                DataGridView2.Columns.Add(String.Format("C{0}", cell), cell.ToString())
            Next
            generate = False
        End If

        DataGridView2.Rows.Add(values)

    Next

谁能帮我解决我的问题?任何帮助将非常感激。如果它有帮助,我可以不用第一行,所以如果我可以修改剪贴板字符串以放弃第一行,它仍然适用于我的解决方案。

PS:上述解决方案提供的较长代码在粘贴时也会导致错误,因此我不使用提供的更优雅的代码。

【问题讨论】:

  • 您可以在粘贴数据后添加两个缺失的列。顺便说一句,=> Clipboard.GetText.Split(...):您可以将ToList() 添加到其中,使用列表的第一个元素创建列,然后删除第一行[List].RemoveAt(0) 并将列表用作DGV 的数据源。顺便说一句,这不是:.Split({lineFeed, carriageReturn}, StringSplitOptions.None) 产生空值吗?
  • 嗯……如果你知道你总是需要在网格中添加两个空列,你能不能只在添加列时更改结束循环值? For cell As Integer = 0 To (values.Length + 1)
  • 我已经让它工作了,确实是我必须事先添加两列。谢谢你们指出正确的方向:)

标签: vb.net datagridview clipboard


【解决方案1】:

感谢@Jimi 和@JohnG,我能够通过预先添加两列来解决我的问题。

【讨论】: