How to cancel the OnAddNewRowInitiating event

Hi, I noticed when using the new row functionality that it is quite easy to add a few blank rows, so I wanted to check in the OnAddNewRowInitiating if you need to finish other rows before creating the new one.

                <sf:SfDataGrid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Name="FieldsGrid" AutoGenerateColumns="False" ItemsSource="{Binding Path=Fields}"
                               AllowEditing="True" AllowSorting="False" AllowFiltering="False" AddNewRowPosition="Bottom"
                               EditTrigger="OnTap" CurrentCellActivating="FieldsGrid_OnCurrentCellActivating" AddNewRowInitiating="FieldsGrid_OnAddNewRowInitiating">

I can set the defaults no problem:

        private void FieldsGrid_OnAddNewRowInitiating(object sender, AddNewRowInitiatingEventArgs args)
        {
            var newRow = new TableEditorFieldData
            {
                DataType = "Text",
                DataSize = 50
            };
            args.NewObject = newRow;           
        }

But I can't see an args.Cancel, do I just need to always delete the row manually if I do validation on other rows (and assume that the new row is always the last row as there is no args.Row property)?

thanks


3 Replies

SV Srinivasan Vasu Syncfusion Team May 18, 2016 02:05 PM UTC

Hi Craig, 
 
Thanks for contacting Syncfusion support. 
 
Query 1[Cancel AddNewRow ] 
 
 
We have analyzed your query and it is not possible to cancel AddNew operation in AddNewRowInitiating event. Instead of AddNewRowInitiating event you can use SfDataGrid.CurrentCellBeginEdit event like below code example. 
 
C# 
 
this.datagrid.CurrentCellBeginEdit += Datagrid_CurrentCellBeginEdit;     
 
    private void Datagrid_CurrentCellBeginEdit(object sender, CurrentCellBeginEditEventArgs args) 
        { 
            if (this.datagrid.IsAddNewIndex(args.RowColumnIndex.RowIndex)) 
            { 
                args.Cancel = true;  
            }  
        } 
 
Sample Location: Samples 
 
 
Query2[Remove Row after Validation] 
We can’t understand your requirement clearly and Could you please share more details regarding your exact your requirement?  
 
 
 
 
 
Regards,
Srinivasan 
 



CG Craig Greenway May 18, 2016 05:46 PM UTC

Hi, I am trying to avoid the following scenario where you can create lots of blank rows:


The CurrentCellBeginEdit event didn't help, but using OnRowValidating ended up working well with Add New Row so I am happy for this to be considered closed :)

        private void FieldsGrid_OnRowValidating(object sender, RowValidatingEventArgs args)
        {
            var data = args.RowData.GetType().GetProperty("FieldName").GetValue(args.RowData);
            if (data == null || data.ToString().Equals(""))
            {
                args.IsValid = false;
                args.ErrorMessages.Add("FieldName", "Field Name is compulsory");
            }

            data = args.RowData.GetType().GetProperty("DataType").GetValue(args.RowData);
            if (data == null || data.ToString().Equals(""))
            {
                args.IsValid = false;
                args.ErrorMessages.Add("DataType", "Data Type is compulsory");
            }
            //other fields are given default values and cannot be blanked out, so no need to check on other fields
        }



SV Srinivasan Vasu Syncfusion Team May 19, 2016 04:47 AM UTC

Hi Craig, 
  
Thanks for your update. 
  
Regards, 
Srinivasan 


Loader.
Up arrow icon