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 → DataTableDataAdapter → 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.