C# 用另一个下拉列表填充下拉列表

C# 用另一个下拉列表填充下拉列表,c#,linq,linq-to-xml,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.MapPa

我正在用另一个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中填充状态。有人能帮我吗?

使用此选项:

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

使用此项:

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

我将您的查询更改为:

var query = from user in main.Root.Descendants("country")
            where user.Elements("state").Any() && user.Elements("state").First().Value == st 
            select user;
请注意,我取了根元素的后代,检查country的state元素exist,然后用给定的值检查state值。如果找到匹配项,将选择country元素

这也将返回XMlelements,您不能直接将它们绑定到
数据源
,您可以从该查询中选择国家名称和其他内容,最后将其转换为列表或数组。上面的结果可以直接绑定到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>
从country元素属性获取国家名称

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 query = from user in main.Root.Descendants("country")
            where user.Elements("state").Any() && user.Elements("state").First().Value == st 
            select user;
请注意,我取了根元素的后代,检查country的state元素exist,然后用给定的值检查state值。如果找到匹配项,将选择country元素

这也将返回XMlelements,您不能直接将它们绑定到
数据源
,您可以从该查询中选择国家名称和其他内容,最后将其转换为列表或数组。上面的结果可以直接绑定到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>
从country元素属性获取国家名称

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>


我已经检查了你所说的,但是我没有得到任何结果,当我在查询中使用断点检查时,它说枚举没有产生任何结果。你的解决方案似乎很小,你能把它上传到某个地方,以便我可以试着调试你的问题吗?如果没有看到您的XML和其他内容,我不确定是否可以修复此问题。。。对我来说,最快的方法就是打开你的解决方案,或者你准备的演示项目,在你有相同问题的地方。是的,我知道问题出在查询上,但我无法获得它。我可以上传到哪里?MediaFire?投递箱?发送文件?佐霍?发送空间?你选吧,但我不会在这里待太久!所以要快:)我已经检查了你说的话,但是我没有得到任何结果,当我在查询时使用断点检查时,它说枚举没有产生任何结果。你的解决方案看起来很小,你能把它上传到某个地方吗,这样我就可以试着调试你的问题了?如果没有看到您的XML和其他内容,我不确定是否可以修复此问题。。。对我来说,最快的方法就是打开你的解决方案,或者你准备的演示项目,在你有相同问题的地方。是的,我知道问题出在查询上,但我无法获得它。我可以上传到哪里?MediaFire?投递箱?发送文件?佐霍?发送空间?你选吧,但我不会在这里待太久!所以要快:)你能用数据发布你的xml格式吗?你能用数据发布你的xml格式吗?我的xml lokk像这样的印度马哈拉施特拉克什米尔果阿我已经检查了你的代码,但我在countrynames处得到空值,当我调试时,st值是第一个下拉字符串st=DropDownList1.text中的文本;我知道,当你调试时,你可以找到'st'值,如果它是马哈拉施特拉邦、克什米尔或果阿,你将得到印度作为国名。否则,您将得到null:)yaa但当我在CountryName处调试代码时,我得到的结果类似于枚举不会产生任何结果我的xml LOKK类似于此印度马哈拉施特拉邦克什米尔果阿我检查了您的代码,但当我调试时,我在CountryName处得到null值是第一个下拉字符串st=DropDownList1.文本;我知道,当你调试时,你可以找到'st'值,如果它是马哈拉施特拉邦、克什米尔或果阿,你将得到印度作为国名。否则您将得到null:)yaa,但当我在countrynames上调试代码时,我得到的结果就像枚举没有产生任何结果一样