数据绑定到以编程方式创建的DataTable

时间:2009-01-08 18:59:53

标签: c# data-binding ado.net

假设我有这样的数据表:

        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创建的数据表起作用,而不是在程序化创建的数据表上起作用?

2 个答案:

答案 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");