如果我们在DDL中选择国家名称相应的状态必须出现在另一个DDL下面,我用另一个DDL填充一个DDL是我的代码
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string st = (DropDownList1.SelectedIndex).ToString();
XDocument main = XDocument.Load((Server.MapPath(@"XMLFile1.xml")));
var query = from user in main.Descendants("country")
where st == user.Element("state").Value
select user;
DropDownList2.DataSource = query;
DropDownList2.DataBind();
}
但是我无法在另一个DDL中填充状态,任何人都可以帮助我吗?
答案 0 :(得分:1)
我已将您的查询更改为:
var query = from user in main.Root.Descendants("country")
where user.Elements("state").Any() && user.Elements("state").First().Value == st
select user;
请注意,我带了Root元素的后代并检查country的状态元素是否存在,然后检查给定值的状态值。如果匹配,则会选择country元素。
此外,这将返回XMlelements,您无法直接将它们绑定到DataSource
,您可以从该查询中选择国家/地区名称,最后将其转换为列表或数组。上面的结果可以直接绑定到DropDownList
这里是示例xml:
<?xml version="1.0" encoding="utf-8" ?>
<countries>
<country>Test1</country>
<country name ="A">
<state>Test2</state>
</country>
<country name ="B">
<state>Test2</state>
</country>
<country name ="C">
<state>Test3</state>
</country>
</countries>
加载xml
XDocument main = XDocument.Load("input.xml");
从国家/地区元素属性
获取国家/地区名称var countryNames = (from user in main.Root.Descendants("country")
where user.Elements("state").Any() && user.Elements("state").First().Value == "Test2"
select user.Attribute("name").Value).ToList();
你的XML:
<country>
<name>India</name>
<state>
<text>Maharashtra</text>
<text>Kashmir</text>
<text>Goa</text>
</state>
</country>
更新代码:
var countryNames = (from user in main.Descendants("country")
where user.Elements("state").Descendants("text").Any(s => s.Value == st)
select user.Element("name").Value).ToList();
答案 1 :(得分:0)
改为使用:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string st = DropDownList1.SelectedValue;
XDocument main = XDocument.Load((Server.MapPath(@"XMLFile1.xml")));
var query = from user in main.Descendants("country")
where st == user.Element("state").Value
select user;
DropDownList2.DataSource = query;
DropDownList2.DataBind();
}
您使用的是项目的索引(1/2/3/4/5),而不是值,我更改了它以便您使用值(显示成员)而不是该项目的索引。