Luego de de una larga selección de datos hemos podido resolver este enigma que presentan ciertos de nuestros lectores. Te regalamos la respuesta y esperamos que resulte de gran apoyo.
Solución:
Después de investigar un poco, descubrí que primero tengo que agregar columnas, luego agregar una nueva fila, obtener el índice de fila de la fila recién creada y luego establecer los valores de celda.
Aquí está el código actualizado:
DataObject o = (DataObject)Clipboard.GetDataObject();
if (o.GetDataPresent(DataFormats.Text))
if (myDataGridView.RowCount > 0)
myDataGridView.Rows.Clear();
if (myDataGridView.ColumnCount > 0)
myDataGridView.Columns.Clear();
bool columnsAdded = false;
string[] pastedRows = Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd("rn".ToCharArray()), "rn");
foreach (string pastedRow in pastedRows)
string[] pastedRowCells = pastedRow.Split(new char[] 't' );
if (!columnsAdded)
for (int i = 0; i < pastedRowCells.Length; i++)
myDataGridView.Columns.Add("col" + i, pastedRowCells[i]);
columnsAdded = true;
continue;
myDataGridView.Rows.Add();
int myRowIndex = myDataGridView.Rows.Count - 1;
using (DataGridViewRow myDataGridViewRow = myDataGridView.Rows[myRowIndex])
for (int i = 0; i < pastedRowCells.Length; i++)
myDataGridViewRow.Cells[i].Value = pastedRowCells[i];
}
Y aquí está funcionando:
Feliz de aceptar críticas y consejos útiles para mejorar esto. Este código es bastante lento...
Sé que es algunos años después, pero estaba buscando una solución para este problema y encontré la modificación de BASA del código de Latheesan. Solo funcionó parcialmente, por lo que al modificarlo, me gustaría agregar esta solución para futuros navegadores:
private void Paste(DataGridView d)
DataObject o = (DataObject)Clipboard.GetDataObject();
if (o.GetDataPresent(DataFormats.StringFormat))
string[] pastedRows = Regex.Split(o.GetData(DataFormats.StringFormat).ToString().TrimEnd("rn".ToCharArray()), "r");
int j = 0;
try j = d.CurrentRow.Index; catch
foreach (string pastedRow in pastedRows)
DataGridViewRow r = new DataGridViewRow();
r.CreateCells(d, pastedRow.Split(new char[] 't' ));
d.Rows.Insert(j, r);
j++;
Código perfecto aquí: (escribir en el botón)
DataObject o = (DataObject)Clipboard.GetDataObject();
if (o.GetDataPresent(DataFormats.Text))
if (myDataGridView.RowCount > 0)
myDataGridView.Rows.Clear();
if (myDataGridView.ColumnCount > 0)
myDataGridView.Columns.Clear();
bool columnsAdded = false;
string[] pastedRows = Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd("rn".ToCharArray()), "rn");
int j=0;
foreach (string pastedRow in pastedRows)
string[] pastedRowCells = pastedRow.Split(new char[] 't' );
if (!columnsAdded)
for (int i = 0; i < pastedRowCells.Length; i++)
myDataGridView.Columns.Add("col" + i, pastedRowCells[i]);
columnsAdded = true;
continue;
myDataGridView.Rows.Add();
int myRowIndex = myDataGridView.Rows.Count - 1;
using (DataGridViewRow myDataGridViewRow = myDataGridView.Rows[j])
for (int i = 0; i < pastedRowCells.Length; i++)
myDataGridViewRow.Cells[i].Value = pastedRowCells[i];
j++;
Modificado del código de Latheesan.
Aquí tienes las reseñas y puntuaciones
Ten en cuenta recomendar esta sección si te valió la pena.