繁体   English   中英

将XPath与ASP.NET C#Web应用程序一起使用

[英]Using XPath with ASP.NET C# Web Application

我是在ASP.NET C#中使用Xpath的新手。 我有一个Gridview并能够从xml文件中插入/编辑/删除数据。 但是,我需要能够使用更复杂的xml文件执行相同的任务。 有人可以帮助我开始如何在代码中实现Xpath功能吗?

使用以下xml ex.1,所有功能均符合预期

 <root>
  <partNumbers>
    <partid>0</partid>
    <partnumber>796542</partnumber>
  </partNumbers>
  <partNumbers>
    <partid>1</partid>
    <partnumber>225614</partnumber>
  </partNumbers>
  <partNumbers>
    <partid>2</partid>
    <partnumber>123457</partnumber>
  </partNumbers>
</root>

...但是,我需要使用以下xml ex.2文件执行相同的操作,注意:实际文件包含更多内容,但仅使用以下内容进行测试:

<root>
<pos>
  <partNumbers>
    <partid>0</partid>
    <partnumber>796542</partnumber>
  </partNumbers>
  <partNumbers>
    <partid>1</partid>
    <partnumber>225614</partnumber>
  </partNumbers>
  <partNumbers>
    <partid>2</partid>
    <partnumber>123457</partnumber>
  </partNumbers>
</pos>
</root>

...背后的代码-我已包含标头指令System.Xml和System.Xml.Xpath(代码段)

protected void BindGridView()
{
    DataSet dsgvPartNumber = new DataSet();
    dsgvPartNumber.ReadXml(Server.MapPath("~/xml/storeUserInfo.xml"));
    gvPartNumber.DataSource = dsgvPartNumber;
    gvPartNumber.DataBind();
    gvPartNumber.ShowFooter = true;
}

...其余只是我的插入/编辑/删除等功能,效果很好

..... Gridview:

<asp:GridView ID="gvPartNumber" runat="server" AutoGenerateColumns="False"
    onrowdeleting="gvPartNumber_RowDeleting" onrowediting="gvPartNumber_RowEditing"
    onrowupdating="gvPartNumber_RowUpdating" onrowcommand="gvPartNumber_RowCommand"
    ShowFooter="True" Width="482px"
    onrowcancelingedit="gvPartNumber_RowCancelingEdit">
    <Columns>
        <asp:TemplateField HeaderText="Part ID">
            <EditItemTemplate>
                <asp:TextBox ID="txtPartID" runat="server" Text='<%# Bind("partID") %>'></asp:TextBox>
            </EditItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txtPartIDInsert" runat="server"></asp:TextBox>
            </FooterTemplate>
            <ItemTemplate>
                <asp:Label ID="lblPartID" runat="server" Text='<%# Bind("PartID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
         <asp:TemplateField HeaderText="Part Number">
            <EditItemTemplate>
                <asp:TextBox ID="txtPartNumber" runat="server" Text='<%# Bind("partNumber") %>'></asp:TextBox>
            </EditItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txtPartNumberInsert" runat="server"></asp:TextBox>
            </FooterTemplate>
            <ItemTemplate>
                <asp:Label ID="lblPartNumber" runat="server" Text='<%# Bind("PartNumber") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ShowHeader="False">
            <EditItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
                    CommandName="Update" Text="Update"></asp:LinkButton>
                &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
                    CommandName="Cancel" Text="Cancel"></asp:LinkButton>
            </EditItemTemplate>
            <FooterTemplate>
                <asp:LinkButton ID="btnInsert" runat="server" CommandName="insertXMLData">Insert</asp:LinkButton>
            </FooterTemplate>
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
                    CommandName="Edit" Text="Edit"></asp:LinkButton>
            </ItemTemplate>
            <ItemStyle Width="120px" />
        </asp:TemplateField>
        <asp:CommandField ShowDeleteButton="True" />
     </Columns>
</asp:GridView>  

...当我使用ex.2运行页面时-我收到一个错误:System.Data.DataRowView'不包含名称为'PartID'的属性-有人可以向我提供有关如何操作的指示使用Xpath解决此问题?

如果您进行更改,它将起作用

gvPartNumber.DataSource = dsgvPartNumber;

gvPartNumber.DataSource = dsgvPartNumber.Tables["partNumbers"];

可能您忽略了第二个xml返回数据集中的两个表,这是正常行为。 当您将gridview源设置为此数据集时,它正在使用默认表(pos)进行绑定,并且数据绑定失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM