假设我有这样的数据表:
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上的名称。参数 name:dataMember
知道为什么这会对dataAdapter创建的数据表起作用,而不是在程序化创建的数据表上起作用?
答案 0 :(得分:3)
好吧,在搞乱你的代码一段时间后,我一直感到难过。然后我终于意识到了这个问题。我假设_dtRow是一个DataRow。您需要引用实际的DataTable(dt)。
this.textBox1.DataBindings.Add("Text", dt, "Name");
编辑:看到你对伊戈尔的帖子发表评论后。如果你绑定到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 AGAIN 好的,是时候破解它了。这就是我开始工作的方式:
this.textBox1.DataBindings.Add("Text",_dtRow.ItemArray[1], "");
我使用了索引1,但你可以在数组中使用你需要的任何索引。
答案 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");