Articles in this section
Category / Section

How to paste the copied row in AddNewRow in WPF DataGrid (SfDataGrid)?

1 min read

You can paste the copied row in AddNewRow by overriding the PasteTextToRow method in GridCutCopyPaste class in WPF DataGrid (SfDataGrid).

XAML

<syncfusion:SfDataGrid x:Name="sfdatagrid"
                               AddNewRowPosition="Top"
                               AllowEditing="True"
                               AutoGenerateColumns="True"
                               GridCopyOption="CopyData"
                               ItemsSource="{Binding EmployeeDetails}"
                               SelectionMode="Extended"
                               SelectionUnit="Row" />

C#

this.sfdatagrid.GridCopyPaste = new CustomPaste(sfdatagrid);
…
public class CustomPaste : GridCutCopyPaste
{
    public CustomPaste(SfDataGrid sfgrid)
        : base(sfgrid)
    {
 
    }
 
    protected override void PasteTextToRow()
    {
        IDataObject dataObject = null;
        dataObject = Clipboard.GetDataObject();
        var clipBoardContent = dataObject.GetData(DataFormats.UnicodeText) as string;
        string[] records = Regex.Split(clipBoardContent.ToString(), @"\r\n");
        if (dataGrid.SelectionUnit == GridSelectionUnit.Row)
        {
            dataGrid.Focus();
            bool isAddNewRow= this.dataGrid.IsAddNewIndex(this.dataGrid.SelectionController.CurrentCellManager.CurrentRowColumnIndex.RowIndex);
               
            //Checking for row is AddNewRow.
            if (isAddNewRow)
            {
                if (!this.dataGrid.View.IsAddingNew)
                    return;
                                      
                string[] record = Regex.Split(records[0], @"\t");
                var provider = this.dataGrid.View.GetPropertyAccessProvider();                  
                var rowData = (this.dataGrid.View as CollectionViewAdv).CurrentAddItem;
 
                //Paste the copied row in each cell.
                foreach (var column in this.dataGrid.Columns)
                {                       
                    var cellText = provider.GetValue(rowData, column.MappingName);
                    if (cellText == null)
                    {
                        PropertyDescriptorCollection typeInfos = this.dataGrid.View.GetItemProperties();
                        var typeInfo = typeInfos.GetPropertyDescriptor(column.MappingName);                          
                    }
                    CommitValue(rowData, column, provider, record[this.dataGrid.Columns.IndexOf(column)]);
                }
            }
        }
        else
            base.PasteTextToRow();
    }
}        

 

Note:

You can only paste the copied row after initiating the AddNewRow by editing.

View sample in GitHub.

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied