我有以下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可以帮助我吗?
答案 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>
元素,并从每个元素中将属性放在text
和value
值中。然后我们使用这些值来创建一个新的ListItem
(为每个<name>
元素创建一个)。
然后,此结果可用于绑定<asp:DropDownList>
控件的数据。