У меня есть DataGridView в приложении .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? Возможно, есть лучший способ получить всю сетку, скопированную в буфер обмена, в первую очередь, не затрагивая выбранные ячейки?
Спасибо. Это то, что я сделал в конце. Мне пришлось добавить еще один оператор if: if (row.Cells [i] .Visible) ', потому что пара столбцов была невидима, и это решение копирует все ячейки, видимые или нет - (' dataGridView1.GetClipboardContent(); 'только копии видимые вещи). Не знаете, как будет обрабатываться DataGridViewImageCell, но это не касается моего конкретного приложения. – Nigel
Без проблем Найджел, рад помочь. Когда я упоминал DataGridViewImageCell, я просто имел в виду, что не знаю, как будет вести себя код, если вы используете что-либо, кроме DataGridViewTextBoxCell, но я считаю, что этот тип является значением по умолчанию, если вы не указали иначе. Но если вы используете все ячейки TextBox, это не должно быть проблемой. Приветствия. –
Просто хочу отметить, что если 'DataGridView' большой, вы, вероятно, захотите использовать' StringBuilder', а не просто использовать конкатенацию строк. – Anthony