C# 如何使用ASP.NET应用程序中XML文件中的数据填充DropDownList

C# 如何使用ASP.NET应用程序中XML文件中的数据填充DropDownList,c#,asp.net,xml,drop-down-menu,C#,Asp.net,Xml,Drop Down Menu,我有一个带有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

我有一个带有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>
<asp:XmlDataSource ID="XMLData" runat="server" DataFile="~/App_Data/Werke.xml" />
        <asp:DropDownList ID="dropWerk" runat="server" Width="245px" />
private void BindXML()
        {
          XmlDocument xmldoc = XMLData.GetXmlDocument();

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

<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" />

受保护的void dropWerk_OnSelectedIndexChanged(对象发送方,System.EventArgs e){
Label1.Text=dropWerk.SelectedItem.Text.ToString();
}  
您可能希望在dropWerk\u on SelectedIndexChanged处理程序中设置断点,并检查dropWerk。SelectedItem可了解如何更好地使用传递的值尝试以下操作:

<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" />

受保护的void dropWerk_OnSelectedIndexChanged(对象发送方,System.EventArgs e){
Label1.Text=dropWerk.SelectedItem.Text.ToString();
}  

您可能希望在dropWerk\u on SelectedIndexChanged处理程序中设置断点,并检查dropWerk。SelectedItem可了解如何更好地使用传递的值第一种方法: 将xml存储在数据集中,然后将其分配给dropdownlist

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();
更新答案: *第二种方法:*在dropdownlist项目中逐个添加值 如果我从注释中理解了您的问题,那么您希望将xml值添加到列表项中 试试这个


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

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();
更新答案: *第二种方法:*在dropdownlist项目中逐个添加值 如果我从注释中理解了您的问题,那么您希望将xml值添加到列表项中 试试这个

解决方案:

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方法中绑定此方法,它将起作用:)

解决方案:

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方法中,它会起作用:)

到目前为止,您尝试了哪些代码,希望您不希望人们为您编写这些。您好,欢迎来到您的第二周!你自己试过什么?你有什么特别的代码有问题吗?@ChrisBint:看看我的CS文件代码。到目前为止你都尝试了哪些代码,希望你不希望别人为你写这些。你好,欢迎来到你的第二周!你自己试过什么?有没有什么特定的代码您遇到了麻烦?@ChrisBint:查看我的CS文件代码。我不知道您使用Label1.Text=dropWerk.SelectedItem.Text.ToString()是什么意思;因为我用XML值的值创建了一个新的ListItem::我不知道标签1.Text=dropWerk.SelectedItem.Text.ToString()是什么意思;因为我创建了一个值为XML值的新ListItem://@Tarasov现在您有什么问题?我想创建一个值为的新ListItem。如果我启动我的程序,我会得到一个空的DropDownList:(@Tarasov您的代码中有一个错误:ds.ReadXml(XMLData.DataFile);不要在ReadXml方法中指定xmldatasource,只需给出xmlfilename例如ds.ReadXml(“xmlfile.xml”);或查看我的答案。@Tarasov在哪个页面事件中调用绑定方法?@Tarasov如果代码似乎正确,请在ds.ReadXml(XMLData.DataFile)处放置一个断点;然后单击鼠标右键,查看包含数据的表或正在创建的表null@Tarasov现在您的问题是什么?我想创建一个新的ListItem,其值为。如果启动我的程序,我会得到一个空的DropDownList:(@Tarasov您的代码中有一个错误:ds.ReadXml(XMLData.DataFile);不要在readxml方法中指定xmldatasource,只需给出xmlfilename,例如ds.readxml(“xmlfile.xml”);或查看我的答案。@Tarasov在哪个页面事件中调用Bind method?@Tarasov如果代码似乎正确,请在ds.readxml(XMLData.DataFile)处放置一个断点;然后右键单击,查看包含数据的表或表为空