6 Answers, 1 is accepted
Hello, Fabrizio,
RadGridView supports built-in Copy/Paste functionality, which allows you to store text in the Clipboard and then paste it in a different location. The copying functionality in RadGridView is controlled via the ClipboardCopyMode property. More information on this topic you can find here: https://docs.telerik.com/devtools/winforms/controls/gridview/copy-paste-cut
I hope this information is useful. Should you have other questions do not hesitate to ask.
Regards,
Nadya
Progress Telerik
Nadya
Thank you very much for the answer and I apologize because my question was not complete. In fact I have an unbound RadGridView, the cells in the row are filled in by hand and not from a database. To better explain, the user takes measurements from a mechanical piece and each measurement is written with the keyboard in each cell of the row. Sometimes I need to select the compiled row and paste it directly into the new row. It can be done ? Even code is fine, maybe in a one button event.
Thanks so much
Fabrizio
I am attaching a screenshot
Hi, Fabrizio,
Thank you for providing additional information.
RadGridView is not supposed to perform copy/paste operation inside the new row. However, you can easily achieve when modifying the default paste behavior by creating a custom grid. Please refer to the following example:
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
public RadForm1()
{
InitializeComponent();
for (int i = 1; i <=5; i++)
{
this.radGridView1.Columns.Add("Misura "+i);
}
this.radGridView1.SelectionMode = GridViewSelectionMode.FullRowSelect;
}
}
public class CustomGrid : RadGridView
{
protected override RadGridViewElement CreateGridViewElement()
{
return new CustomRadGridViewElement();
}
public override string ThemeClassName
{
get
{
return typeof(RadGridView).FullName;
}
}
}
public class CustomRadGridViewElement : RadGridViewElement
{
protected override MasterGridViewTemplate CreateTemplate()
{
return new CustomMasterGridViewTemplate();
}
protected override Type ThemeEffectiveType
{
get
{
return typeof(RadGridViewElement);
}
}
}
public class CustomMasterGridViewTemplate : MasterGridViewTemplate
{
public override void Paste()
{
if (Clipboard.ContainsData(DataFormats.Text))
{
string data = Clipboard.GetData(DataFormats.Text).ToString();
if (data != string.Empty && this.Owner.CurrentRow is GridViewNewRowInfo)
{
int columnIndex = this.Owner.CurrentColumn.Index;
string[] rowsInfo = data.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string rowInfo in rowsInfo)
{
string[] cellsInfo = rowInfo.Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
GridViewRowInfo rowToInsert = this.Owner.Rows.NewRow();
for (int i = 0; i < cellsInfo.Length; i++)
{
rowToInsert.Cells[i + columnIndex].Value = cellsInfo[i];
}
this.Owner.Rows.Add(rowToInsert);
}
}
}
}
}I hope this helps. Should you have other questions do not hesitate to ask.
Regards,
Nadya
Progress Telerik
Hi Nadya
First of all thank you very much for your patience, I regret it but I can't make it work. I have tried with your code but for sure it is I who am not able to make it work. After I added the classes with the routines in overrides I don't know how to call the Paste () routine from the RadGridView on the Form. I am attaching my code.
Thank you very much and sorry again
Fabrizio
Imports Telerik.WinControls.UIPublic Class Form1 Public Sub New() ' La chiamata è richiesta dalla finestra di progettazione. InitializeComponent() End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load ' Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent(). For i As Integer = 1 To 10 RadGridView1.Columns.Add(New GridViewTextBoxColumn("Misura " + i.ToString)) Next RadGridView1.SelectionMode = GridViewSelectionMode.FullRowSelect End SubEnd ClassPublic Class CustomGrid Inherits RadGridView Protected Overrides Function CreateGridViewElement() As RadGridViewElement Return New CustomRadGridViewElement() End Function Public Overrides Property ThemeClassName As String Get Return GetType(RadGridView).FullName End Get Set(value As String) MyBase.ThemeClassName = value End Set End PropertyEnd ClassPublic Class CustomRadGridViewElement Inherits RadGridViewElement Protected Overrides Function CreateTemplate() As MasterGridViewTemplate Return New CustomMasterGridViewTemplate() End Function Protected Overrides ReadOnly Property ThemeEffectiveType() As Type Get Return GetType(RadGridViewElement) End Get End PropertyEnd ClassPublic Class CustomMasterGridViewTemplate Inherits MasterGridViewTemplate Public Overrides Sub Paste() If Clipboard.ContainsData(DataFormats.Text) Then Dim dataClip As String = Clipboard.GetData(DataFormats.Text).ToString If (dataClip <> String.Empty) And TypeOf Owner.CurrentRow Is GridViewNewRowInfo Then Dim columnIndex As Integer = Owner.CurrentColumn.Index Dim rowsInfo As String() = dataClip.Split(New String() {vbCrLf}, StringSplitOptions.RemoveEmptyEntries) For Each rowInfo As String In rowsInfo Dim cellsInfo As String() = rowInfo.Split(New String() {vbTab}, StringSplitOptions.RemoveEmptyEntries) Dim rowToInsert As GridViewRowInfo = Owner.Rows.NewRow() For i As Integer = 0 To i < cellsInfo.Length rowToInsert.Cells(i + columnIndex).Value = cellsInfo(i) Next Owner.Rows.Add(rowToInsert) Next End If End If End SubEnd ClassHi, Fabrizio,
According to the provided code snippet, it is not clear how you initialize the grid and whether you use the default RadGridView or the custom one. Could you please make sure that you use the custom grid in your project in order to allow the logic in the overridden Paste method to be executed.
Me.RadGridView1 = New CustomGrid()I attached a project in VB for your reference. When using Ctrl+ C/Ctrl+V key combinations you will be able to select a row and paste it into the new row as demonstrated in the gif file from my previous post. Note, that this is a sample example and may not cover all possible cases. Feel free to modify or extend it in order to best fit your scenario.
I hope this information helps.
Regards,
Nadya
Progress Telerik
Thank you so much ,I had gone a little confused. Now everything is fine, it works fine. Thank you very much for your patience and competence
Fabrizio
