使用linq从xml填充下拉列表

时间:2012-01-09 19:49:48

标签: asp.net xml linq drop-down-menu

我有以下xml doc:

<?xml version="1.0" encoding="utf-8" ?>
<dropdowns>

  <dropdown name="DropDownLoc">
    <menu text="Select" value="-1" />
    <menu text="North" value="1200" />
    <menu text="South" value="1400" />  
  </dropdown>

  <dropdown nome="DropDownEsp">
    <menu text="Select" value="-1" />
    <menu text="Est" value="7" />
    <menu text="Ovest" value="9" />
  </dropdown>
</dropdowns>

我想阅读这个xml并使用给定下拉列表名称的方法填充两个下拉列表(如“DropDownEsp”) 我想用linq做到这一点,linq可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

下面的代码可以帮助您阅读XML并创建项目列表(ListItem):

// or use XDocument.Parse("xml string") to parse string
XDocument xdoc = XDocument.Load(@"c:\testxml.xml");
var dropLists = xdoc.Descendants("dropdown")
                .Select(d => d.Descendants("menu").Select(m =>
                        new /* new ListItem(text, value) */
                        {
                            Text = m.Attribute("text"),
                            Value = m.Attribute("value")
                        }))
                .ToList();

尝试自己将项目添加到控件中。

答案 1 :(得分:1)

如果你的.aspx页面上有一个空的<asp:DropDownList ID="DynamicDropDown" runat="server" />控件,你可以将数据绑定到LINQ查询的结果,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
  if(!Page.IsPostBack) 
  {
    // Assuming your XML file is in the App_Data folder in the root of your website
    string path = Server.MapPath("~/App_Data/DropDowns.xml");

    // Let's say we want to use the options from the second <dropdown>-tag in your XML
    string whichDropDown = "DropDownEsp";

    // This is the LINQ query to find those options from the XML
    // and turn them into ListItem objects
    var query = 
      from dropDown in XDocument.Load(path).Descendants("dropdown")
      where dropDown.Attribute("name").Value == whichDropDown

      from name in dropDown.Descendants("name")
      let text = name.Attribute("text").value
      let value = name.Attribute("value").value 

      select new ListItem(text, value);

    // Now we data bind the query result to the control
    DynamicDropDown.DataSource = query;
    DynamicDropDown.DataBind();
  }
}

在LINQ查询中,我们首先只选择具有正确名称的<dropdown>元素(基于whichDropDown变量)。然后我们选择所有<name>元素,并从每个元素中将属性放在textvalue值中。然后我们使用这些值来创建一个新的ListItem(为每个<name>元素创建一个)。

然后,此结果可用于绑定<asp:DropDownList>控件的数据。