ASP.NET GridView Tutorial - ConflictDetection property of SqlDataSource control – Part 14

Database, Information Technology

ASP.NET GridView Tutorial

301 Lessons

ConflictDetection property of SqlDataSource control – Part 14

Link for csharp,,, dotnet basics and sql server video tutorial playlists

Link for text version of this video

In this video we will discuss about ConflictDetection property of SqlDataSource control. Please watch Part 13 of gridview tutorial before proceeding. In this example, we will be using tblEmployee table that we created in Part 13.

Drag and drop a GridView, Label and a SqlDataSource datasource control on WebForm1.aspx. Flip WebForm1.aspx to source mode and change the “ID” of Label control from “Label1” to “lblMessage”. Flip WebForm1.aspx to design mode.

Now let’s configure “SqlDataSource1” control
1. Right click on “SqlDataSource1” control and select “Show Smart Tag”
2. Now click on “Configure Data Source” link
3. Select connection string, from the dropdownlist on “Choose your data connection” screen. You need to have a connection string specified in web.config file.
4. Click Next
5. On “Configure the Select Statement” screen, select “tblEmployee” table from dropdownlist.
6. Click on “Advanced” button
7. Make sure you check CheckBoxes next to “Generate INSERT, UPDATE and DELETE statements” and “Use Optimistic Concurrency”. Click OK.
8. Click Next and Finish

Now flip “WebForm1.aspx” to “HTML Source” mode. Notice that, the wizard has automatically generated INSERT, UPDATE and DELETE statements. Since, we only want to enable the gridview control to delete data, get rid of InsertCommand, InsertParameters, UpdateCommand, and UpdateParameters.

Since we have selected “Use Optimistic Concurrency” when configuring “SqlDataSource1” control, the generated “DeleteCommand” compares the row data with original values.
DeleteCommand=”DELETE FROM [tblEmployee] WHERE [EmployeeId] = @original_EmployeeId AND (([Name] = @original_Name) OR ([Name] IS NULL AND @original_Name IS NULL)) AND (([Gender] = @original_Gender) OR ([Gender] IS NULL AND @original_Gender IS NULL)) AND (([City] = @original_City) OR ([City] IS NULL AND @original_City IS NULL))”

Also, ConflictDetection property is set to “CompareAllValues”.

Had we not selected “Use Optimistic Concurrency” checkbox, the generated “DeleteCommand” would have been as shown below.
DeleteCommand=”DELETE FROM [tblEmployee] WHERE [EmployeeId] = @original_EmployeeId”

When Optimistic Concurrency is not enabled, ConflictDetection property is set to “OverwriteChanges”.

So, when optimistic concurrency option is used, and when we try to delete or update a row thru gridview control, then all the columns of the row that is being deleted are compared to check if the data has changed since the row was loaded into the gridview control. If data has changed, the row will not be deleted, and the gridview control simply refreshes with new data.

Now let us associate “SqlDataSource1” control with “GridView1” control
1. Right click on “GridView1” control and select “Show Smart Tag”
2. Select “SqlDataSource1” from “Choose Data Source” dropdownlist
3. Select “Enable Deleting” checkbox. At this point “Delete” button should appear on the gridview control.

Run the application. Click “Delete” button. The row gets deleted as expected.

Now execute the following SQL statement to update “Name” from “John” to “Johny” for employee with EmployeeId=2
Update tblemployee set Name=’Johny’ where EmployeeId = 2

At this point in the gridview control, row with EmployeeId=2, still shows the name as “John”. Now, click Delete button in this row. Notice that, the row is not deleted and the grid gets refreshed with new data. This is because, we are using optmistic concurrency option and the data for this row has changed in the database table, after it was loaded into the gridview control.

If the row data has changed, and when that row is not deleted, then I want to display a message in a label control stating – “Employee Row with EmployeeID = 2 is not deleted due to data conflict”

To achieve this, we can use “RowDeleted” event of the gridview control. This event is raised after a row is deleted from the gridview control. Now let’s generate the event handler method for “RowDeleted” event.
1. Right click on the gridview control and select “Properties”
2. In the “Properties” window click on events button
3. Double click on RowDeleted event. This should generate the event handler method in the code-behind file. Copy and paste the code from my blog from the following link.

Run the application. After the data is loaded into gridview control, update any row in the database table, and try to delete that, same row in the gridview control. You should get the data conflict message as expected.

    Access DataSource in AccessDataSource in Alert another gridview ascending asp net gridview access database c# bind xml to gridview data source controls datagridview datasource controls get data from access database gridview gridview bind to xml gridview edit gridview formatting gridview sqldatasource gridview xml c# gridview xml file ms access database example objectdatasource explained between bi-directional bidirectional bind xml file to gridview in binding xml file to gridview business objects C# c# accessdatasource c# data source object c# datagrid example c# get data from access database c# gridview sqldatasource c# sql data source connection string c# sqldatasource example c# sqldatasource selectcommand c# xslt example c# xslt transform xml document c# xslt tutorial cells changing data checkbox client-side code colspan CompareAllValues compute concurrency confirm ConflictDetection conflictdetection property content control controls convert xml node to attribute custom paging Data DataFormat String DataFormatString datagrid in datagrid in c# DataKeyNames dataset datasource datasource controls default paging delete delete confirmation delete data Deleting deleting data descending detailed data details view details view in DetailsView difference display Displaying displaying gridview document Drill Down Drilldown drilling down dropdownlist edit edit and update editing EmptyDataTemplate EmptyDataText event example Excel Export exporting footer footer row format formatting gridview at runtime Formatting gridview in code generate Grid View gridview gridview currency format gridview datasource xml file gridview date format gridview ms access database gridview retrieve templatefield value gridview RowDataBound gridview template gridview templatefield gridview templatefield get control GridViewDeletedEventArgs hierarchical data how how to display date in gridview without time How to get value from TemplateField in GridView how to pass data from gridview to another page in image field imagefield images implement implementing insert inside javascript jquery KeepInEditMode Merging. merge microsoft multiple rows nested nested gridview nesting no data no rows in datasource object datasource object datasource in objectdatasource objectdatasource in order OverwriteChanges page page numbers page size paging pdf properties read xml file with child nodes c# Repeater Retrieve ItemTemplate control value in Gridview row cells rowcommand rowdatabound rowdatabound event RowDataBound example RowDeleted event RowUpdated several rows show date only in gridview showing sort sort arrows sort images sortable Sorting sqldatasource sqldatasource in stored procedures summary data templatefield totals tutorial two or more rows Update update data Updated updating updating data Use use optimistic concurrency using validation Validation Controls web server when without without data source controls without datasource controls Word workbook working with xmldatasource in xslt basics xslt example xslt to transform xml to xml xslt transformation xslt transformation c# example