【问题标题】:Fill dropdown list from xml with linq使用 linq 从 xml 填充下拉列表
【发布时间】:2012-02-06 07:59:14
【问题描述】:

我有以下 xml 文档:

<?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-to-xml 或动态下拉操作遇到了哪些问题?

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


【解决方案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();

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

【讨论】:

    【解决方案2】:

    如果您的 .aspx 页面上有一个空的 &lt;asp:DropDownList ID="DynamicDropDown" runat="server" /&gt; 控件,您可以将其数据绑定到 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 查询中,我们首先仅选择具有正确名称的 &lt;dropdown&gt; 元素(基于 whichDropDown 变量)。然后我们选择所有&lt;name&gt; 元素,并从每个元素中将属性放入textvalue 值中。然后我们使用这些值创建一个新的ListItem(为每个&lt;name&gt; 元素创建一个)。

    然后可以使用此结果对&lt;asp:DropDownList&gt; 控件进行数据绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      相关资源
      最近更新 更多