繁体   English   中英

Datagridview不显示标签字符

[英]Datagridview not displaying tab character

我使用一个可视的基本程序从另一个程序(我们称为ProgramX)获取信息。

ProgramX具有内置功能来生成制表符分隔的表,许多用户将其复制到Excel。 我的目标(我已经实现)是生成并收集多达1,000个这些表,并使结果准备好供用户一次性复制/粘贴到Excel中,而不是一次复制/粘贴到Excel中。 我的数据集将保留制表符分隔的记录,就像我想要的一样。

问题是,当我在datagridview中显示数据集/数据表时,所有选项卡字符都将被删除。 将结果复制/粘贴到Excel中后,它们占据一列,而不是自动拆分。 我一直在使用datagridview预览结果/复制到剪贴板; 有什么办法可以在此视图中保留选项卡?

预期结果:结果1 [选项卡]结果2 [选项卡]结果3

数据表中的结果:结果1 [选项卡]结果2 [选项卡]结果3

datagridview中的结果:结果1结果2结果3

如果要实现这一目标的唯一方法是直接从我的数据表中复制,我已经看到了一些有关如何实现此目标的文章。 谢谢!

您有许多可用的选项,但是在大多数情况下,您需要以一种或另一种方式执行一些循环-但是,即使有1000多个记录,其性能也几乎不会受到影响。

因此,对于前几个选项,假设我具有以下设置-遵循您的一个DataGridViewColumn想法:

Me.table = New DataTable()
Me.table.Columns.Add("Data", GetType(String))

For i As Integer = 0 To 999
    Dim x As Integer = i * 4
    Dim data As String = String.Format("Result {0}" & vbTab & "Result {1}" & vbTab & "Result {2}" & vbTab & "Result {3}", x + 1, x + 2, x + 3, x + 4)
    Me.table.Rows.Add(data)
Next

Me.dataGridView1.AllowUserToAddRows = False
Me.dataGridView1.DataSource = Me.table

可能的解决方案

  1. 遍历DataTable ,连接数据,并设置剪贴板文本:

     Private Sub button1_Click(sender As Object, e As System.EventArgs) Handles button1.Click Dim content As String = String.Empty For Each row As DataRow In Me.table.Rows content = String.Format("{0}" & vbLf & "{1}", content, row.ItemArray(0).ToString()) Next content = content.TrimStart(ControlChars.Lf) Clipboard.SetText(content) End Sub 
  2. 遍历DataGridView.Rows ,连接数据,并设置剪贴板文本:

     Private Sub button1_Click(sender As Object, e As System.EventArgs) Handles button1.Click Dim content As String = String.Empty For Each row As DataGridViewRow In Me.dataGridView1.Rows content = String.Format("{0}" & vbLf & "{1}", content, row.Cells(0).Value.ToString()) Next content = content.TrimStart(ControlChars.Lf) Clipboard.SetText(content) End Sub 

  • 为了使选项1和2的网格看起来更好一点,因为显示似乎忽略了选项卡:

     Private Sub dataGridView1_CellFormatting(ByVal sender As Object, _ ByVal e As DataGridViewCellFormattingEventArgs) _ Handles dataGridView1.CellFormatting Dim value As String = e.Value.ToString().Replace(vbTab, " ") e.Value = value End Sub 

    这样,您的网格可能看起来像:

    dgv一栏


  1. 除了原始设置之外,不绑定到原始DataTable ,而是通过选项卡拆分表的数据,并将其显示在单独的列中:

     Dim splitTable As New DataTable() For Each row As DataRow In Me.table.Rows Dim splitItems = row.ItemArray(0).ToString().Split(ControlChars.Tab) For i As Integer = splitTable.Columns.Count To splitItems.Length - 1 splitTable.Columns.Add(String.Empty, GetType(String)) Next splitTable.Rows.Add(splitItems) Next Me.dataGridView1.AllowUserToAddRows = False Me.dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText Me.dataGridView1.DataSource = splitTable 

    然后,您可以对DataGridView使用内置的剪贴板方法:

     Private Sub button1_Click(sender As Object, e As System.EventArgs) Handles button1.Click Me.dataGridView1.SelectAll() Clipboard.SetDataObject(Me.dataGridView1.GetClipboardContent()) End Sub 

    这样,您的网格可能看起来像:

    具有多列的dgv


对于这三个选项,单击button1复制数据并在Excel中按Ctrl + V将产生:

出色的结果

请注意, 默认情况下 ,“ 环绕文字”将处于启用状态


优点:

选项1和2保留用户选择的单元格不变。 选项3与单独的DataGridView列一起看起来更好。

缺点:

选项1和2在等待数据时看起来不太干净。 选项3选择所有单元格,丢失用户先前选择的单元格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM