Datatable
in ADO.NET is highly useful to do in memory data related operations. But it is very painful to update data when it is bound to a
datagridview
or
bindingsource
.
While I was developing an application in .NET with C#, I came across this problem in which I had to modify a data table of 100000 records. It took lots of time to update the entire table. I Googled how best I could to come out of this problem. Everywhere I got suggestions to set the below mentioned properties before and after updation:
BindingSource bs = new BindingSource();
DataTable dt = new DataTable();
bs.DataSource = dt;
bs.SuspendBinding();
bs.RaiseListChangedEvents = false;
dt.BeginLoadData();
dt.EndLoadData();
bs.RaiseListChangedEvents = true;
bs.ResumeBinding();
bs.ResetBindings(true);
The above code snippet performed OK compared to simple updation of
datatable
without setting properties. Still I wanted to achieve more performance while modifying
datatable
.
Upon investigation, I could achieve it by setting the filter property of binding source.
BindingSource bs = new BindingSource();
DataTable dt = new DataTable();
bs.DataSource = dt;
bs.SuspendBinding();
bs.RaiseListChangedEvents = false;
bs.Filter = "1=0";
dt.BeginLoadData();
dt.EndLoadData();
bs.RaiseListChangedEvents = true;
bs.Filter = "";