[英]After setting DataSource of DataGridView, Columns and Rows are still empty
我有一个DataTable和一个DataGridView。
我已经阅读了这个答案,但是我没有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
在添加到容器控件之前, DataGridView
的BindingContext
为null,并且在为控件设置DataSource
,它检查BindingContext
是否为null,直到其BindingContext
更改为非null值之后,它才添加列和行。
如果这是您要添加到父项的控件,则通过将其添加到父项,您将具有列和行:
this.Controls.Add(dgv);
如果不打算将其添加到容器中并且仅出于打印目的,则可以为控件设置BindingContext
:
dgv.BindingContext = new BindingContext();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.