繁体   English   中英

设置DataGridView的DataSource后,“列”和“行”仍为空

[英]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

在添加到容器控件之前, DataGridViewBindingContext为null,并且在为控件设置DataSource ,它检查BindingContext是否为null,直到其BindingContext更改为非null值之后,它才添加列和行。

如果这是您要添加到父项的控件,则通过将其添加到父项,您将具有列和行:

this.Controls.Add(dgv);

如果不打算将其添加到容器中并且仅出于打印目的,则可以为控件设置BindingContext

dgv.BindingContext = new BindingContext();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM