2010-01-18 29 views

risposta

2

La classe DataGridViewRow ha un metodo .Clone che clonerà la riga corrente che contiene.

Date un'occhiata here per ulteriori informazioni

+0

L'ho controllato. Ma dopo aver copiato i dati quando lo incollo nella nuova riga di un gridview. Non incolla i dati della riga precedente mentre si incolla in una singola casella di testo. Ho appena copiato la funzione di codice msdn incolla dopo la funzione di DataGridView. – Programmer

7

ho trovato un post che contiene il codice da incollare valori da appunti in DataGridView.

sono stato googling come incollare a DataGridView in C# da appunti, un informazioni, copiato da Excel, e non ha trovato risposta completa. Ho raccolto un paio di thread dai forum e ho trovato questa risposta, spero che renderà la vita qualcuno più facile. Non dovete capire il codice basta copiare e incollare

Qui di seguito è una versione po 'modificata. Oltre al piccolo refactoring, proibisco di incollare le celle di ReadOnly. esempio

Usage:

private void dataGridView1_KeyUp(object sender, KeyEventArgs e) 
{ 
    ClipboardUtils.OnDataGridViewPaste(sender, e); 
} 

Codice:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Windows.Forms; 

namespace Commons 
{ 
    public class ClipboardUtils 
    { 
     public static void OnDataGridViewPaste(object grid, KeyEventArgs e) 
     { 
      if ((e.Shift && e.KeyCode == Keys.Insert) || (e.Control && e.KeyCode == Keys.V)) 
      { 
       PasteTSV((DataGridView)grid); 
      } 
     } 

     public static void PasteTSV(DataGridView grid) 
     { 
      char[] rowSplitter = { '\r', '\n' }; 
      char[] columnSplitter = { '\t' }; 

      // Get the text from clipboard 
      IDataObject dataInClipboard = Clipboard.GetDataObject(); 
      string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text); 

      // Split it into lines 
      string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries); 

      // Get the row and column of selected cell in grid 
      int r = grid.SelectedCells[0].RowIndex; 
      int c = grid.SelectedCells[0].ColumnIndex; 

      // Add rows into grid to fit clipboard lines 
      if (grid.Rows.Count < (r + rowsInClipboard.Length)) 
      { 
       grid.Rows.Add(r + rowsInClipboard.Length - grid.Rows.Count); 
      } 

      // Loop through the lines, split them into cells and place the values in the corresponding cell. 
      for (int iRow = 0; iRow < rowsInClipboard.Length; iRow++) 
      { 
       // Split row into cell values 
       string[] valuesInRow = rowsInClipboard[iRow].Split(columnSplitter); 

       // Cycle through cell values 
       for (int iCol = 0; iCol < valuesInRow.Length; iCol++) 
       { 

        // Assign cell value, only if it within columns of the grid 
        if (grid.ColumnCount - 1 >= c + iCol) 
        { 
         DataGridViewCell cell = grid.Rows[r + iRow].Cells[c + iCol]; 

         if (!cell.ReadOnly) 
         { 
          cell.Value = valuesInRow[iCol]; 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+0

Bel codice.Non è pronto per il prime time, ma la maggior parte del modo lì. L'ho usato in un progetto personale e funziona fintanto che lentamente lasci andare la "v" in ctrl + v e la griglia deve essere in EditMode di EditOnKeystrokeOrF2 – Mario

0

Copia una riga ad un altro? Perché semplicemente non andare per esso come questo

public DataGridViewRow CloneWithValues(DataGridViewRow row) 
{ 
    DataGridViewRow clonedRow = (DataGridViewRow)row.Clone(); 
    for (Int32 index = 0; index < row.Cells.Count; index++) 
    { 
     clonedRow.Cells[index].Value = row.Cells[index].Value; 
    } 
    return clonedRow; 
} 

Inoltre è possibile fare riferimento a: http://canlu.blogspot.com/2009/06/copying-datagridviewrow-to-another.html

Spero che questo aiuti! :}

0

Qui di seguito è la mia versione modificata di alex2k8 risposta questo lavoro per datagridview legato.

qui è la versione non modificata

' Add rows into grid to fit clipboard lines 
     if (grid.Rows.Count < (r + rowsInClipboard.Length)) 
     { 
      grid.Rows.Add(r + rowsInClipboard.Length - grid.Rows.Count); 
     } 

qui è la mia modifica accadere speranza qualcuno ha ottenuto aiutato qui dt è un DataTable

' Add rows into grid to fit clipboard lines 
    If grid.Rows.Count < (r + rowsInClipboard.Length) Then 
     Dim workRow As DataRow 
     Dim i As Integer 

     For i = 0 To (r + rowsInClipboard.Length - grid.Rows.Count) 
      workRow = dt.NewRow() 
      workRow(0) = "" 

      dt.Rows.Add(workRow) 
     Next 
    End If 

NOTA: il codice è in vb.net utilizzare http://converter.telerik.com/ per riconvertirlo in C#

Problemi correlati