How to paste the data by custom column order instead of the first column in the DataGrid when SelectionUnit is a Row in WinRT?
When SelectionUnit is a Row, the data can be pasted only from the first column, by default. Now, you can paste the copied data anywhere in the Grid by deriving a new class from GridCutCopyPaste and overriding the PasteToRow virtual method.
C#
public class CustomCopyPaste : GridCutCopyPaste
{
public CustomCopyPaste(SfDataGrid sfgrid)
: base(sfgrid)
{
}
protected override void PasteToRow(object clipboardcontent, object selectedRecords)
{
//Splits the row into number of cells by using \t.
clipboardcontent = Regex.Split(clipboardcontent.ToString(), @"\t");
var copyValue = (string[])clipboardcontent;
//For Row selection
if (dataGrid.SelectionUnit == GridSelectionUnit.Row)
{
int columnindex = 0;
//Gets the currentcell column index.
var index = this.dataGrid.SelectionController.CurrentCellManager.CurrentCell.ColumnIndex;
foreach (var column in dataGrid.Columns)
{
if (index >= dataGrid.Columns.Count)
return;
if (copyValue.Count() <= this.dataGrid.Columns.IndexOf(column))
break;
// Calls the PasteToCell method and passes the copied data and pastes the column index.
PasteToCell(selectedRecords, this.dataGrid.Columns[index], copyValue[columnindex]);
index++;
columnindex++;
}
}
}
}
You can customize the GridCutCopyPaste class and assign its instance to the SfDataGird.GridCopyPasteproperty as described in the following code.
C#
this.sfdatagrid.GridCopyPaste = new CustomCopyPaste(sfdatagrid);
Sample Links: