用另一个填充下拉列表

时间:2012-06-05 03:31:49

标签: c# linq linq-to-xml

如果我们在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中填充状态,任何人都可以帮助我吗?

2 个答案:

答案 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),而不是值,我更改了它以便您使用值(显示成员)而不是该项目的索引。