C# 将DataGridView内容复制到剪贴板。粘贴时,未选中的行将作为空行提交。!

C# 将DataGridView内容复制到剪贴板。粘贴时,未选中的行将作为空行提交。!,c#,winforms,datagridview,copy-paste,C#,Winforms,Datagridview,Copy Paste,我有一个简单的数据网格视图,我正在复制其内容,如下所示: 当我将其粘贴到记事本时,它显示如下: 如何删除1 JAKE和3汤姆之间的空行?< /P> 我正在使用此代码复制: private void copySelectedToolStripMenuItem_Click(object sender, EventArgs e) { if (this.dataGridView1.GetCellCount(DataGridViewElementStates.Selected

我有一个简单的数据网格视图,我正在复制其内容,如下所示:

当我将其粘贴到记事本时,它显示如下:

如何删除1 JAKE和3汤姆之间的空行?< /P> 我正在使用此代码复制:

 private void copySelectedToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (this.dataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0)
        {
            try
            {

                Clipboard.SetDataObject(
                    this.dataGridView1.GetClipboardContent());

            }
            catch (System.Runtime.InteropServices.ExternalException)
            {
                // "The Clipboard could not be accessed. Please try again.";
            }
        }
    }
是否有更好的方法只复制选定的内容?
请提供帮助。

您可以在所有选定行上循环:

string clipboard = "";
foreach (DataGridViewRow dgvr in dataGridView1.SelectedRows)
{
    foreach (DataGridViewColumn dgvc in dg_autoTestStatus.Columns)
        clipboard += dataGridView1.Rows[dgvr.Index].Cells[dgvc.Index].FormattedValue.ToString() + " ";
    clipboard += "\n"
}
Clipboard.SetText(clipboard);
我已经解决了它如下:

if (this.dataGridView1.SelectedRows.Count > 0)
{
    StringBuilder ClipboardBuillder = new StringBuilder();
    foreach (DataGridViewRow Row in dataGridView1.SelectedRows)
    {
        foreach (DataGridViewColumn Column in dataGridView1.Columns)
        {
           ClipboardBuillder.Append(Row.Cells[Column.Index].FormattedValue.ToString() + " ");
        }
        ClipboardBuillder.AppendLine();
    }

    Clipboard.SetText(ClipboardBuillder.ToString());
}
我认为最好使用“\t”作为列分隔符,1)在dgv上生成更接近ctrl+c的结果,2)如果粘贴到excel,它将正确地用花键固定到单元格中