ADO - Advanced Data Binding in ADO.NET
Advanced data binding means binding ADO.NET data objects to UI controls with synchronization, validation, formatting, and updates back to the database—not just displaying data.
Used mainly in:
-
WinForms
-
WPF
-
ASP.NET (WebForms / limited MVC scenarios)
1. Core ADO.NET objects used for binding
| Object | Role |
|---|---|
DataTable |
In-memory table |
DataSet |
Multiple related tables |
DataView |
Filter/sort layer |
BindingSource |
Mediator between UI & data |
DataAdapter |
Sync DB ↔ memory |
2. Binding with BindingSource (best practice)
BindingSource handles:
-
Currency (current row)
-
Navigation
-
Sorting & filtering
-
Two-way binding
BindingSource bs = new BindingSource();
bs.DataSource = dataTable;
dataGridView1.DataSource = bs;
✔ Cleaner
✔ Reusable
✔ UI-agnostic
3. Two-way data binding (read + write)
textBox1.DataBindings.Add(
"Text", bs, "Name", true, DataSourceUpdateMode.OnPropertyChanged);
Changes in UI → reflected in DataTable
Changes in data → reflected in UI
4. Updating database from bound controls
adapter.Update(dataTable);
Flow:
UI → DataTable → DataAdapter → Database
✔ Disconnected model
✔ Batch updates supported
5. Using DataView for sorting & filtering
DataView view = new DataView(dataTable);
view.RowFilter = "Status = 'Active'";
view.Sort = "CreatedDate DESC";
bs.DataSource = view;
✔ No DB hit
✔ Instant UI updates
6. Master–Detail binding (advanced & important)
dataSet.Relations.Add(
"CustomerOrders",
dataSet.Tables["Customers"].Columns["Id"],
dataSet.Tables["Orders"].Columns["CustomerId"]
);
bsCustomers.DataSource = dataSet;
bsCustomers.DataMember = "Customers";
bsOrders.DataSource = bsCustomers;
bsOrders.DataMember = "CustomerOrders";
Selecting a customer automatically filters orders.
7. Validation during binding
dataTable.ColumnChanging += (s, e) =>
{
if (e.Column.ColumnName == "Age" && (int)e.ProposedValue < 18)
e.Row.SetColumnError("Age", "Must be 18+");
};
UI will display validation errors automatically.
8. Formatting & conversion
textBox1.DataBindings[0].Format += (s, e) =>
{
e.Value = $"₹{e.Value}";
};
Used for:
-
Currency
-
Dates
-
Custom display rules
9. Performance considerations (facts)
✔ Bind DataView, not raw DataTable
✔ Avoid binding very large datasets
✔ Use paging for grids
✔ Disable auto-resize on big grids
10. Common mistakes
❌ Binding controls directly to DataTable
❌ Updating DB on every keystroke
❌ Ignoring validation events
❌ Mixing UI logic with DB logic
Advanced ADO.NET data binding synchronizes UI controls and in-memory data with validation, sorting, filtering, and efficient database updates using a disconnected architecture.