1

如果我们在 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 中填充状态,有人可以帮我解决这个问题吗?

4

2 回答 2

1

我已将您的查询更改为:

var query = from user in main.Root.Descendants("country")
            where user.Elements("state").Any() && user.Elements("state").First().Value == st 
            select user;

请注意,我取了 Root 元素的后代并检查国家/地区是否存在 state 元素,然后使用给定值检查 state 值。如果找到匹配,将选择国家元素。

而且这将返回 XMleelements,您不能直接将它们绑定到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();
于 2012-06-05T04:19:37.567 回答
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),而不是值,我对其进行了更改,以便您使用值(显示成员)而不是该项目的索引。

于 2012-06-05T03:36:02.680 回答