数据绑定到程序化创建的DataTable

假设我有一个像这样的数据表:

DataTable dt = new DataTable("Woot"); dt.Columns.AddRange(new DataColumn[]{ new DataColumn("ID",typeof(System.Guid)), new DataColumn("Name",typeof(String)) }); 

当我尝试将控件绑定到它时:

  this.txtName.DataBindings.Add("Text", _dtRow, "Name"); 

我得到这个例外:

无法绑定到DataSource上的属性或列名称。 参数名称:dataMember

知道为什么这个数据可以在dataAdapter创建的数据表上运行,但不能在程序创建的数据表上运行吗?

好吧,在搞乱你的代码一段时间后,我一直感到难过。 然后我终于意识到了这个问题。 我假设_dtRow是一个DataRow。 您需要引用实际的DataTable(dt)。

 this.textBox1.DataBindings.Add("Text", dt, "Name"); 

编辑:看到你对伊戈尔的post的评论后。 如果绑定到dt,那么例如,如果您有一个绑定到此DataTable的datagridview,则每次选择不同的行时,文本框都会更改。

这是适用于我的代码:

  DataTable dt = new DataTable("Woot"); dt.Columns.AddRange(new DataColumn[]{ new DataColumn("ID",typeof(System.Guid)), new DataColumn("Name",typeof(String)) }); dt.Rows.Add(Guid.NewGuid(), "John"); dt.Rows.Add(Guid.NewGuid(), "Jack"); this.dataGridView1.DataSource = dt; this.textBox1.DataBindings.Add("Text", dt, "Name"); 

更改DGV中的行,您将看到文本框更改文本。

EIDT再次确定,是时候破解它了。 这就是我开始工作的方式:

 this.textBox1.DataBindings.Add("Text",_dtRow.ItemArray[1], ""); 

我使用索引1,但你可以在数组中使用你需要的任何索引。

你不应该引用dt而不是_dtRow吗?

例如:

 this.txtName.DataBindings.Add("Text", dt, "Name"); 

编辑:

这段代码对我有用:

  DataTable dt = new DataTable("Woot"); dt.Columns.AddRange(new DataColumn[]{ new DataColumn("ID",typeof(System.Guid)), new DataColumn("Name",typeof(String)) }); DataRow r = dt.NewRow(); r["ID"] = new Guid(); r["Name"] = "AAA"; dt.Rows.Add(r); r = dt.NewRow(); r["ID"] = new Guid(); r["Name"] = "BBB"; dt.Rows.Add(r); dataGridView1.DataSource = dt; this.txtName.DataBindings.Add("Text", r.Table , "Name");