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.UI
Public
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
Sub
End
Class
Public
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
Property
End
Class
Public
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
Property
End
Class
Public
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
Sub
End
Class
Hi, 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