Im Beispiel liegen zwei DataGridViews auf einem Formular: gvSource und gvTarget. Die gewählten Zeilen (MultiSelect ist möglich) aus gvSource werden per Drag & Drop in gvTarget gezogen. Vorrausetzung ist hierbei, dass in beiden DataGridViews die gleichen Spalten vorhanden sind.
// Eigenschaften die gesetzt werden müssen gvSource.SelectionMode = DataGridViewSelectionMode.FullRowSelect; gvSource.MultiSelect = true; gvTarget.SelectionMode = DataGridViewSelectionMode.FullRowSelect; gvTarget.AllowDrop = true; // wenn im gvSource ein oder mehrere Zeilen markiert und der linke Mausbutton gedrückt gehalten wird private void gvSource_CellMouseDown(object sender, MouseEventArgs e) { // nur DragDrop initiieren, wenn Elemente aus dem Zellenbereich gewählt, // sonst gibt es Probleme beim Einstellen der Spaltenbreite per Maus if (e.RowIndex != -1) { if (gvSource.SelectedRows.Count -> 0) { DragDropEffects dropEffect = gvSource.DoDragDrop(gvSource.SelectedRows, DragDropEffects.Copy); } } } // wenn die Maus mit den Objekten über gvTarget ist private void gvTarget_DragOver(object sender, DragEventArgs e) { e.Effect = DragDropEffects.None; DataGridViewSelectedRowCollection rows = e.Data.GetData(typeof(DataGridViewSelectedRowCollection)) as DataGridViewSelectedRowCollection; if (rows != null) { e.Effect = DragDropEffects.Copy; } } // Objekte aus gvSource in gvTarget einfügen, Doppelungen vermeiden private void gvTarget_DragDrop(object sender, DragEventArgs e) { DataGridViewSelectedRowCollection rows_source = e.Data.GetData(typeof(DataGridViewSelectedRowCollection)) as DataGridViewSelectedRowCollection; if (rows_source != null) { foreach (DataGridViewRow rs in rows_source) { bool bFound = false; // prüfen, ob schon in der Liste foreach (DataGridViewRow row_target in gvTarget.Rows) { // Vergleich von Spalte mit Index 0, wenn gleich, dann schon vorhanden if (rs.Cells[0].Value.ToString() == row_target.Cells[0].Value.ToString()) { bFound = true; break; } } // wenn noch nicht vorhanden, dann einfügen if (bFound == false) { DataGridViewRow rnew = new DataGridViewRow(); rnew.CreateCells(gvTarget); rnew.Cells[0].Value = rs.Cells[0].Value.ToString(); rnew.Cells[1].Value = rs.Cells[1].Value.ToString(); rnew.Cells[2].Value = rs.Cells[2].Value.ToString(); gvTarget.Rows.Add(rnew); } } } }