DataBinding XML-无法绑定到数据源

时间:2018-08-16 16:28:51

标签: c# xml data-binding

我正在用XML测试非常简单的数据绑定,当XML的子节点深度超过2级时,我遇到了麻烦。

我收到此错误:

  

System.ArgumentException:'无法绑定到属性或列   数据源上的SecondLevel / SecondNode1。参数名称:dataMember'

我没有使用XSD模式文件,但是如果有帮助的话,这对我来说不是问题。

这是我的XML内容:

<?xml version="1.0" encoding="UTF-8"?>
<sample xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MainNode>
    <SubNode1>basic string</SubNode1>
    <SubNode2>0</SubNode2>
    <SubNode3>true</SubNode3>
    <SecondLevel>
        <SecondNode1>another string</SecondNode1>
        <SecondNode2>1</SecondNode2>
        <SecondNode3>false</SecondNode3>
    </SecondLevel>
</MainNode>
</sample>

这是我的C#代码:

public Form1()
{
    InitializeComponent();

    // load the file
    DataSet ds = new DataSet();
    ds.ReadXml("sample.xml");

    BindingSource bs = new BindingSource();

    //bs.DataSource = ds;
    //bs.DataMember = ds.Tables[0].TableName; //main node
    bs.DataSource = ds.Tables[0];
    //bs.DataMember = ds.Tables[0].TableName; //main node

    textBox1.DataBindings.Add("Text", bs, "SubNode1");
    comboBox1.DataBindings.Add("SelectedIndex", bs, "SubNode2");
    checkBox1.DataBindings.Add("Checked", bs, "SubNode3");

    //Error happens below
    textBox2.DataBindings.Add("Text", bs, "SecondLevel/SecondNode1");
    //comboBox2.DataBindings.Add("SelectedIndex", bs, "SecondLevel/SecondNode2");
    //checkBox2.DataBindings.Add("Checked", bs, "SecondLevel/SecondNode3");
}

此外,如果您能指出一种实现这种双向的方法,那将会有所帮助! 谢谢。

1 个答案:

答案 0 :(得分:0)

好,我知道了。

这是修改后的代码,可以正常工作-基本上,我删除了BindingSource, 并直接使用了DataSet(Duh!)

public Form1()
{
    InitializeComponent();

    // load the file
    DataSet ds = new DataSet();
    ds.ReadXml("sample.xml");

    // Removed usage of BindingSource
    // BindingSource bs = new BindingSource();
    // bs.DataSource = ds.Tables[0];

    textBox1.DataBindings.Add("Text", ds.Tables[0], "SubNode1");
    comboBox1.DataBindings.Add("SelectedIndex", ds.Tables[0], "SubNode2");
    checkBox1.DataBindings.Add("Checked", ds.Tables[0], "SubNode3");

    // Error fixed when using ds directly
    textBox2.DataBindings.Add("Text", ds.Tables[1], "SecondNode1");
    comboBox2.DataBindings.Add("SelectedIndex", ds.Tables[1], "SecondNode2");
    checkBox2.DataBindings.Add("Checked", ds.Tables[1], "SecondNode3");
}