2010-11-02 33 views
5

He visto que Datagridview no permite copiar y pegar el texto de más de una celda, ¿hay alguna configuración simple para habilitar eso o debo usar la clave? almacenamiento de datos del controlador y del portapapeles para incluir esa funcionalidad.Copie y pegue varias celdas dentro de DataGridView

Un usuario desea copiar 3 celdas dentro de una fila y poder pegar el texto de ellas en una fila diferente.

Respuesta

5

Ok, tengo una solución, pero no ha sido probado por pegar células cruzando múltiples rows.This es el evento KeyDown del datagridview

if (e.Control && e.KeyCode == Keys.C) 
      { 
       DataObject d = AccountGrid.GetClipboardContent(); 
       Clipboard.SetDataObject(d); 
       e.Handled = true; 
      } 
      else if (e.Control && e.KeyCode == Keys.V) 
      { 
       string s = Clipboard.GetText(); 
       string[] lines = s.Split('\n'); 
       int row = AccountGrid.CurrentCell.RowIndex; 
       int col = AccountGrid.CurrentCell.ColumnIndex; 
       string[] cells = lines[0].Split('\t'); 
       int cellsSelected = cells.Length; 
       for (int i = 0; i < cellsSelected; i++) 
       { 
        AccountGrid[col, row].Value = cells[i]; 
        col++; 
       } 
      } 
1
 string s = Clipboard.GetText(); 
     string[] lines = s.Split('\n'); 
     int row = dataGridView1.CurrentCell.RowIndex; 
     int col = dataGridView1.CurrentCell.ColumnIndex; 
     foreach (string line in lines) 
     { 
      string[] cells = line.Split('\t'); 
      int cellsSelected = cells.Length; 
      if (row < dataGridView1.Rows.Count) 
      { 
       for (int i = 0; i < cellsSelected; i++) 
       { 
        if (col + i < dataGridView1.Columns.Count) 
         dataGridView1[col + i, row].Value = cells[i]; 
        else 
         break; 
       } 
       row++; 
      } 
      else 
      { 
       break; 
      } 
     } 
0
if (e.Control && e.KeyCode == Keys.V) 
{ 

string CopiedContent = Clipboard.GetText(); 
string[] Lines = CopiedContent.Split('\n'); 
int StartingRow = dataGridView1.CurrentCell.RowIndex; 
int StartingColumn = dataGridView1.CurrentCell.ColumnIndex; 
foreach (var line in Lines) 
{ 
    if (StartingRow <= (dataGridView1.Rows.Count - 1)) 
    { 
     string[] cells = line.Split('\t'); 
     int ColumnIndex = StartingColumn; 
     for (int i = 0; i < cells.Length && ColumnIndex <= (dataGridView1.Columns.Count - 1); i++) 
     { 
      dataGridView1[ColumnIndex++, StartingRow].Value = cells[i]; 
     } 
     StartingRow++; 
    } 
}} 
Cuestiones relacionadas