gpt4 book ai didi

c# - DataGridView:复制完整到剪贴板

转载 作者:可可西里 更新时间:2023-11-01 08:09:45 24 4
gpt4 key购买 nike

我在 .Net 应用程序 (V4 C# VS2010) 中有一个 DataGridView,并希望通过单击按钮将所有数据 复制到剪贴板。没问题-

private void copyToClipboard()
{
dataGridView1.SelectAll();
DataObject dataObj = dataGridView1.GetClipboardContent();
if (dataObj != null)
Clipboard.SetDataObject(dataObj);
}

问题是用户可能已经在 DataGrid 上选择了一些单元格、行等,我真的不想更改该选择。以上显然选择了一切。我可以 dataGridView1.ClearSelection();最后,稍微好一点,但仍未达到要求。

我可以保存选定的单元格:

var mySelectedCells = dataGridView1.SelectedCells;

但是如何在复制后在 DataGrid 上重新选择那些选定的单元格?有没有一种简单的方法可以将选定的单元格集合返回到 DataGrid 中?也许有更好的方法可以在不影响当前选定的单元格的情况下将整个网格首先复制到剪贴板?

最佳答案

我想如果你只是想将单元格的内容表示为文本并将它们复制到剪贴板,以制表符分隔,你可以这样做:

    var newline = System.Environment.NewLine;
var tab = "\t";
var clipboard_string = "";

foreach (DataGridViewRow row in dataGridView1.Rows)
{
for (int i=0; i < row.Cells.Count; i++)
{
if(i == (row.Cells.Count - 1))
clipboard_string += row.Cells[i].Value + newline;
else
clipboard_string += row.Cells[i].Value + tab;
}
}

Clipboard.SetText(clipboard_string);

输出看起来与 GetClipboardContent() 的输出非常相似,但要小心任何 DataGridViewImageColumns 或任何不是隐式字符串的类型。

编辑: Anthony 是正确的,使用 StringBuilder 可以避免为每个连接分配新的字符串。新代码:

    var newline = System.Environment.NewLine;
var tab = "\t";
var clipboard_string = new StringBuilder();

foreach (DataGridViewRow row in dataGridView1.Rows)
{
for (int i = 0; i < row.Cells.Count; i++)
{
if (i == (row.Cells.Count - 1))
clipboard_string.Append(row.Cells[i].Value + newline);
else
clipboard_string.Append(row.Cells[i].Value + tab);
}
}

Clipboard.SetText(clipboard_string.ToString());

关于c# - DataGridView:复制完整到剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10521152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com