Category / Section
How to copy the data from one row to many rows and one column to many columns in WinForms GridGroupingControl?
2 mins read
Clipboard operation
In order to copy the data from one row to many rows and one column to many columns, the ClipBoardCanPaste event can be used. The target row or column range has to be given based on the Row and Column cells pasting. The data can be pasted to grid by using PasteTextFromBuffer method.
C#
//To paste at all the selected columns gridControl1.ClipboardCanPaste += new GridCutPasteEventHandler(gridControl1_ClipboardCanPaste); private void gridControl1_ClipboardCanPaste(object sender, GridCutPasteEventArgs e) { //For copying the data from one column to many columns. if (this.gridControl1.Model.SelectedRanges.ActiveRange.IsCols) { for (int i = this.gridControl1.Model.SelectedRanges.ActiveRange.Left; i <= this.gridControl1.Model.SelectedRanges.ActiveRange.Right; i++) { GridRangeInfo range = GridRangeInfo.Cells(1, i, this.gridControl1.RowCount, i); IDataObject iData = Clipboard.GetDataObject(); string buffer = iData.GetData(DataFormats.UnicodeText) as string; if (buffer != null) { this.gridControl1.Model.TextDataExchange.PasteTextFromBuffer(buffer, range, GridDragDropFlags.Text); } } } //For copying the data from one row to many rows. else if (this.gridControl1.Model.SelectedRanges.ActiveRange.IsRows) { for (int i = this.gridControl1.Model.SelectedRanges.ActiveRange.Top; i <= this.gridControl1.Model.SelectedRanges.ActiveRange.Bottom; i++) { GridRangeInfo range = GridRangeInfo.Cells(i, 1, i, this.gridControl1.ColCount); IDataObject iData = Clipboard.GetDataObject(); string buffer = iData.GetData(DataFormats.UnicodeText) as string; if (buffer != null) { this.gridControl1.Model.TextDataExchange.PasteTextFromBuffer(buffer, range, GridDragDropFlags.Text); } } } }
VB
'To paste at all the selected columns AddHandler gridControl1.ClipboardCanPaste, AddressOf gridControl1_ClipboardCanPaste Private Sub gridControl1_ClipboardCanPaste(ByVal sender As Object, ByVal e As GridCutPasteEventArgs) ‘For copying the data from one column to many columns. If Me.gridControl1.Model.SelectedRanges.ActiveRange.IsCols Then For i As Integer = Me.gridControl1.Model.SelectedRanges.ActiveRange.Left To Me.gridControl1.Model.SelectedRanges.ActiveRange.Right Dim range As GridRangeInfo = GridRangeInfo.Cells(1, i, Me.gridControl1.RowCount, i) Dim iData As IDataObject = Clipboard.GetDataObject() Dim buffer As String = TryCast(iData.GetData(DataFormats.UnicodeText), String) If buffer IsNot Nothing Then Me.gridControl1.Model.TextDataExchange.PasteTextFromBuffer(buffer, range, GridDragDropFlags.Text) End If Next i ‘For copying the data from one row to many rows. ElseIf Me.gridControl1.Model.SelectedRanges.ActiveRange.IsRows Then For i As Integer = Me.gridControl1.Model.SelectedRanges.ActiveRange.Top To Me.gridControl1.Model.SelectedRanges.ActiveRange.Bottom Dim range As GridRangeInfo = GridRangeInfo.Cells(i, 1, i, Me.gridControl1.ColCount) Dim iData As IDataObject = Clipboard.GetDataObject() Dim buffer As String = TryCast(iData.GetData(DataFormats.UnicodeText), String) If buffer IsNot Nothing Then Me.gridControl1.Model.TextDataExchange.PasteTextFromBuffer(buffer, range, GridDragDropFlags.Text) End If Next i End If End Sub
Screenshot
Column based copying
Row based copying
Samples: