Tengo un DataGridView en una aplicación .Net (V4 C# VS2010) & quiero copiar todos los datos en el portapapeles con el clic de un botón. No hay problema -DataGridView: copia completa en el portapapeles
private void copyToClipboard()
{
dataGridView1.SelectAll();
DataObject dataObj = dataGridView1.GetClipboardContent();
if (dataObj != null)
Clipboard.SetDataObject(dataObj);
}
problema es que el usuario ya puede tener algunas células, etc filas seleccionadas en la cuadrícula de datos & realmente no quieren cambiar esa selección. Lo anterior obviamente selecciona todo. Podría dataGridView1.ClearSelection(); al final, que es marginalmente mejor, pero aún no logra lo que se requiere.
puedo guardar las celdas seleccionadas:
var mySelectedCells = dataGridView1.SelectedCells;
pero ¿cómo puedo obtener esas células seleccionadas vuelve a seleccionar en la cuadrícula de datos después de la copia? ¿Hay alguna manera fácil de recuperar la colección de celdas seleccionadas en DataGrid? ¿Quizás haya una mejor manera de copiar toda la cuadrícula al portapapeles sin afectar las celdas actualmente seleccionadas?
Gracias. Esto es lo que hice al final. Tuve que agregar otra instrucción if 'if (row.Cells [i] .Visible)' porque un par de columnas eran invisibles y esta solución copia todas las celdas, visibles o no - ('dataGridView1.GetClipboardContent();' copies only cosas visibles). No estoy seguro de cómo se manejaría DataGridViewImageCell, pero eso no es una preocupación para mi aplicación en particular. – Nigel
No hay problema Nigel, me alegro de ayudar. Cuando mencioné DataGridViewImageCell, solo quería decir que no estoy seguro de cómo se comportaría el código si estuviera usando algo más que DataGridViewTextBoxCell, pero creo que ese tipo es el predeterminado si no especifica lo contrario. Pero si está usando todas las celdas TextBox, no debería ser un problema. Aclamaciones. –
Solo quiero mencionar que si 'DataGridView' es grande, probablemente quiera usar' StringBuilder' y no solo usar la concatenación de cadenas. – Anthony