Je travaille sur une application Windows C # et souhaitez copier une ligne dans un DataGridView et la coller dans une nouvelle ligne. Comment puis-je y parvenir? J'utilise .NET Framework 3.5. P>
Pouvez-vous me fournir des idées ou du code qui indiquerait comment je pourrais y parvenir? p>
5 Réponses :
La classe DataGridViewrow a une méthode .clone qui clonera la ligne actuelle qu'elle contient. p>
acheminez ici A > Pour plus d'informations p>
Je l'ai vérifié. Mais après avoir copié les données lorsque je le colle dans une nouvelle ligne d'une grille de grille. Il ne colle pas les données de la ligne précédente pendant que je colle dans une seule zone de texte..it se produit. Je viens de copier la fonction de code MSDN en coller après la fonction de DataGridView.
Je l'ai trouvé un Post qui contient du code pour coller des valeurs de Presse-papiers dans DataGridView.
J'étais googling comment coller à DataGridView en C # dans le presse-papier, un info, copié de Excel, et n'a pas trouver une réponse complète. Collecté couple de threads de forums et est venu avec cette réponse, espérons que ça va faire la vie de quelqu'un plus facile. Vous n'avez pas à comprendre le code juste copier et Coller p> blockQuote>
ci-dessous est une version à modification des bits. Au-delà du petit refactoring, j'interdie la coller dans des cellules réadonnées. P>
Exemple d'utilisation: P>
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]; } } } } } } }
Nice code. Pas prêt pour le temps de qualité, mais la plupart du chemin là-bas. Je l'ai utilisé dans un projet personnel et travaille aussi longtemps que vous laissez lentement le "V 'dans Ctrl + V en premier, et la grille doit être en édition de EdiDonkeystrokeorf2
Copier une ligne à une autre? Pourquoi simplement ne pas y aller comme celui-ci
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; }
ci-dessous est ma version modifiée de alex2k8 em> forte> réponse à ce que cela fonctionnera pour Louid DataGridView. p>
Voici la version non modifiée p>
' 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
J'ai essayé les réponses ici, mais j'ai fini par avoir à quelque chose de différent en raison de la DataGridView étant Databound et le fait que je cache certaines lignes qui gâchent l'itération sur l'indice de rangée. Ceci copie la ligne sélectionnée actuelle et l'ajoute au jeu de données. J'espère que ça aide.