将DataGridView内容复制到剪贴板。粘贴时,选定的行将作为空白行。

时间:2013-09-10 07:51:52

标签: c# winforms datagridview copy-paste

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

enter image description here

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

enter image description here

如何删除1杰克和3汤姆之间的空行?

我正在使用此代码进行复制:

 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.";
            }
        }
    }

有没有更好的方法只复制选定的? 请帮助。

3 个答案:

答案 0 :(得分:1)

我解决了以下问题:

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());
}

答案 1 :(得分:1)

我认为更好(更容易)的解决方案就是......

string clipboardText = dataGridView1.GetClipboardContent().GetText();
Clipboard.SetText(clipboardText.Replace("/n/n", "/n"));

未经测试..可能需要改进双换行符/回车..但我怀疑.NET无论如何都会做正确的事。

答案 2 :(得分:0)

您可以遍历所有选定的行:

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);