This is a migrated thread and some comments may be shown as answers.

Show validation after insert exception

2 Answers 78 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Thomas
Top achievements
Rank 1
Thomas asked on 09 Aug 2015, 04:07 PM

Hi,

there is already a Question "Show validation after insert exception" but no fully answers :( for me.

So i had this problem.

Project ( is in MVVM with DataAccess ) and RadDataGrid

In case i add a new Record i catch the Event "RowEditEnded" to a Command with <telerik:EventBinding> in XAML and the

EventOperationType = GridViewEditOperationType.Insert is found.

Then i Save the Data to DB with DataAccess   context.SaveChanges() ; and DB is sending Back a Exception DuplicateKeyException

so Commit was not done. But Record was added to the Grid. Now i try to change the Attribute (PK) which raised the violation to a valid one and try the same again. The Event is raised "RowEditEnded" as wanted but now not in "Insert" Mode  has switched from  "GridViewEditOperationType.Insert" (as it was before on the Record)  to "GridViewEditOperationType.Edit" which is different in operation then the Insert a new Record in DB.

So Question is how could i tell the Grid not to do this automatic switch until commit is valid (without exception ) done. 

The Record should stay in Insert Mode until Storing was valid.

Or if there is a better solution to handling exceptions on DB side please let me know. 

thnx br thomas

 

 

 

 

 

 

2 Answers, 1 is accepted

Sort by
0
Accepted
Stefan
Telerik team
answered on 11 Aug 2015, 10:37 AM
Hello Thomas ,

Thank you for the detailed description of the issue.

The automatic switch to which you refer is expected, since the item is already an element of the Items collection of RadGridView. The EditOperationType cannot be with "Insert" value in such case.

As to your question, let me propose a possible resolution for the issue you are experiencing. Generally, you shouldn't rely only on the server side for validating data. For most scenarios, this would cause unnecessary calls to the database to say the least. The data should be first validated on the client side, in order to reduce the database calls, and then save the changes to the database.

For validating on client side, RadGridView provides several approaches. You can check our documentation on Validating
to get to know each one. Appropriate for your scenario would be the CellValidating event of RadGridView. Within the event handler you can check if an element with a given PK has already been added to the database, and if it has -  mark the input as invalid. Thus, the element would not be added to the Items collection of RadGridView and when a valid data is entered, the EditOperationType within RowEditEnded will be with "Insert" value. You can take a look at the How to get the Primary Key(s) in EF using DbContext forum thread for further reference.

I hope this fits your requirements.

Best Regards,
Stefan
Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
0
Thomas
Top achievements
Rank 1
answered on 12 Aug 2015, 02:20 PM

Hallo Stefan , thanks for fast Reply.

I already fear in mind that the Status is switched and i have to validate or store the status ( insert / update ) in my own Objects.

The last one i do and it works , but i will also investigate now some time to do a DB check before and avoid the PK constraint.

But it was not a common PK violation ( this is working well ) i have a intermediate Table so   2 PK´s and because i have a Master Detail and the Problem was on Detail , 1 PK was fixed ( from Master ) but the second one must given from Users ( not direkt but via FK + Drop Down Box).

So i will follow your advice and will try todo a sepearte validation before. 

Thanks regards

Thomas

 

 

 

Tags
GridView
Asked by
Thomas
Top achievements
Rank 1
Answers by
Stefan
Telerik team
Thomas
Top achievements
Rank 1
Share this question
or