To reproduce:
- add RadGridView and populate it manually with hierarchical data;
- open one row child rows and select several child rows;
- right click to open the context menu and select Copy;
- paste in Notepad for example. As a result there is no pasted data.
Workaround:
radGridView1.ContextMenuOpening += radGridView1_ContextMenuOpening;
string clipBoard = string.Empty;
RadGridView contextMenuInvoker;
void radGridView1_ContextMenuOpening(object sender, Telerik.WinControls.UI.ContextMenuOpeningEventArgs e)
{
RadGridView grid = sender as RadGridView;
if (grid.CurrentCell is GridDataCellElement || grid.CurrentCell is GridTableBodyElement)
{
if (grid.CurrentRow.ViewTemplate != grid.MasterGridViewTemplate && !(grid.CurrentCell.RowInfo is GridViewNewRowInfo))
{
RadMenuItem itemCopy = new RadMenuItem();
itemCopy.Text = "Copy Row(s)";
itemCopy.Click += new EventHandler(itemCopy_Click);
e.ContextMenu.Items.RemoveAt(3);
e.ContextMenu.Items.Insert(3, itemCopy);
e.ContextMenu.Items.RemoveAt(4);
}
contextMenuInvoker = grid;
}
}
void itemCopy_Click(object sender, EventArgs e)
{
CopyRows(contextMenuInvoker);
}
private void CopyRows(RadGridView radGridView)
{
StringBuilder sb = new StringBuilder();
foreach (GridViewRowInfo row in radGridView.SelectedRows)
{
int i = 0;
while (i < row.Cells.Count)
{
if (i > 0)
{
sb.Append(",");
}
sb.Append(row.Cells[i].Value.ToString());
i++;
}
sb.AppendLine(";");
}
clipBoard = sb.ToString();
Clipboard.SetDataObject(clipBoard);
}