我有一个DataTable和一个DataGridView。
我已阅读this answer,但没有DataAdapter,所以无法调用dataAdapter.Update(dataTable);
。我还阅读了一些官方文档(例如this),但我不理解。
简化代码:
var dt = new DataTable();
var c1 = new DataColumn("ColumnA", typeof(int))
{
Caption = "ColumnA"
};
var c2 = new DataColumn("ColumnB", typeof(int))
{
Caption = "ColumnB"
};
dt.Columns.Add(c1);
dt.Columns.Add(c2);
var dgv = new DataGridView();
var c11 = new DataGridViewTextBoxColumn()
{
Name = "ColumnA",
DataPropertyName = "ColumnA"
};
var c21 = new DataGridViewTextBoxColumn()
{
Name = "ColumnB",
DataPropertyName = "ColumnB"
};
dgv.Columns.Add(c11);
dgv.Columns.Add(c21);
var bs = new BindingSource();
// I also tried inverting these two lines:
bs.DataSource = dt;
dgv.DataSource = bs;
dt.Rows.Add(100, 100);
dt.Rows.Add(200, 200);
// I also tried putting this line here:
//bs.EndEdit();
// here bs.Count == 2, but dgv.RowCount == 0
答案 0 :(得分:2)
在添加到容器控件之前,BindingContext
中的DataGridView
为空,当为控件设置DataSource
时,它会检查BindingContext
是否为空,但不会在列BindingContext
更改为非null值之前,不要添加列和行。
如果这是您要添加到父项的控件,则通过将其添加到父项,您将具有列和行:
this.Controls.Add(dgv);
如果不打算将其添加到容器中,例如,仅出于打印目的,则可以为控件设置BindingContext
:
dgv.BindingContext = new BindingContext();