我正在用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");
}
此外,如果您能指出一种实现这种双向的方法,那将会有所帮助! 谢谢。
答案 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");
}