Это довольно просто: вместо прямого использования DataTable в качестве DataGridView.DataSource
вы можете использовать BindingSource и установить DataTable
в качестве BindingSource.DataSource
.
BindingSource
станет DataGridView.DataSource
.
private BindingSource dgvBindingSource = null;
Создайте DataTable
с требуемым Columns
или заполните его, используя DataAdapter , затем:
DataTable dt = new DataTable("TableName");
//Set the Columns or fill it with a DataAdapter
dgvBindingSource = new BindingSource();
dgvBindingSource.DataSource = dt;
dataGridView1.DataSource = dgvBindingSource;
dt.Dispose();
Когда вам нужно добавить новый DataRow к BindingSource
, вы можете использовать BindingSource.DataSource
напрямую - поля должны быть предоставлены в правильном порядке:
(dgvBindingSource.DataSource as DataTable).Rows.Add(new object[] {
[Field1 Value], [Field2 Value], [Field3 Value], [Field N Value]
});
или добавьте новый DataRow
и присвойте значения полей, используя имена Columns
:
using (DataTable dt = (dgvBindingSource.DataSource as DataTable))
{
DataRow row = dt.NewRow();
row["Column0"] = SomeValue1;
row["Column1"] = SomeValue2;
row["Column2"] = SomeValue3;
dt.Rows.Add(row);
}
Оба метода немедленно обновят DataGridView.