【问题标题】:How I can fill my DropDownList with Data from a XML File in my ASP.NET Application如何在我的 ASP.NET 应用程序中使用 XML 文件中的数据填充 DropDownList
【发布时间】:2012-07-25 08:54:05
【问题描述】:

我有一个带有 DropDownList 的 ASP.NET 应用程序,我希望它填充我的 XML 文件值。 我如何使用我的 XML 来为我的 XML 中的每个值创建一个新项目。

我的 XML 文件:

<?xml version="1.0" standalone="yes" ?>
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="resources">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="Werk" type="xs:string" minOccurs="0" />        
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <resources>
    <Werk>foo1</Werk>      <!-- The first Value-->
  </resources>
  <resources>
    <Werk>foo2</Werk>      <!-- The second Value-->
  </resources>
  <resources>
    <Werk>foo3</Werk>      <!-- The third Value-->
  </resources>
</NewDataSet>

在我的 ASPX 中:

<asp:XmlDataSource ID="XMLData" runat="server" DataFile="~/App_Data/Werke.xml" />
        <asp:DropDownList ID="dropWerk" runat="server" Width="245px" />

我需要一种使用 XML 文件中的数据填充 DropDownList 的方法

塔拉索夫

CS 文件:

private void BindXML()
        {
          XmlDocument xmldoc = XMLData.GetXmlDocument();

          using (DataSet ds = new DataSet())
          {
              ds.ReadXml(XMLData.DataFile);
              dropWerk.DataSource = ds;
              dropWerk.DataTextField = "Werk";
              dropWerk.DataBind(); 
          }
        }

【问题讨论】:

  • 到目前为止你尝试了哪些代码,希望你不要指望别人为你写这一切。
  • 您好,欢迎来到 SO 的第二周!你自己试过什么?您是否遇到任何特定的代码问题?
  • @ChrisBint : 查看我的 CS 文件代码。

标签: c# asp.net xml drop-down-menu


【解决方案1】:

第一种方法: 将 xml 存储在数据集中,然后将其分配给下拉列表

DataSet ds=new DataSet();
ds.ReadXml("xmlfile.xml");

dropWerk.DataSource = ds; or dropWerk.DataSource = ds.Tables[0]; 
dropWerk.TextField = "field name"; // field to display in dropdown
dropWerk.ValueField="Value Field";
dropWerk.DataBind();

更新答案: *第二种方法:* 将值一一添加到您的下拉列表项 如果我从 cmets 中了解您的问题,您希望将 xml 值添加到列表项 试试这个

XmlDocument xdoc=new XmlDocument();
xdoc.Load("xmlfile.xml");

XmlNodeList node = xdoc.SelectSingleNodes("/NewDataSet/resources/");
foreach(XmlNode n in node )
{
ListItem l = new ListItem();
    l.Text = n.InnerXml.ToString();
    drpWerk.Items.Add(l);
}
drpWerk.DataBind();

【讨论】:

  • @Tarasov 现在你有什么问题?
  • 我想用 的值创建一个新的 ListItem。如果我启动我的程序,我会得到一个空的 DropDownList :(
  • @Tarasov 你的代码有错误:ds.ReadXml(XMLData.DataFile);不要在 readxml 方法中指定 xmldatasource 只需给出 xmlfilename 例如 ds.ReadXml("xmlfile.xml");或查看我的答案。
  • @Tarasov 您在哪个页面事件中调用绑定方法?
  • @Tarasov 您的代码似乎正确,在 ds.ReadXml(XMLData.DataFile); 处放置一个断点然后右键查看表包含数据或表为空
【解决方案2】:

试试这个:

<script runat="server">  
    protected void dropWerk_OnSelectedIndexChanged(object sender, System.EventArgs e) {  
        Label1.Text = dropWerk.SelectedItem.Text.ToString();  
}  
</script>  
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/YourXmlFile.xml"></asp:XmlDataSource>
<asp:DropDownList ID="dropWerk" runat="server" Width="245px" DataSourceID="XmlDataSource1" OnSelectedIndexChanged="dropWerk_OnSelectedIndexChanged" />

您可能希望在 dropWerk_OnSelectedIndexChanged 处理程序中放置一个断点并检查 dropWerk.SelectedItem 以了解如何更好地使用传递的值

【讨论】:

  • 我不知道你的 Label1.Text = dropWerk.SelectedItem.Text.ToString(); 是什么意思因为我用 XML 值的值创建了一个新的 ListItem :/
【解决方案3】:

解决方案:

private void BindXML()
        {
            XmlDocument xmldoc = new XmlDocument(); 

          xmldoc.Load(Server.MapPath("~/App_Data/Werke.xml"));

          XmlNodeList nodes = xmldoc.GetElementsByTagName("Werk");

            foreach (XmlNode n in nodes)
            {
                ListItem l = new ListItem();
                l.Text = n.InnerXml.ToString();
                dropWerk.Items.Add(l);
            }

            dropWerk.DataBind();

        }

在Page_Load方法中绑定这个方法,它就可以工作了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2018-06-22
    • 1970-01-01
    相关资源
    最近更新 更多