简体   繁体   English

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

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

I'm new in using Xpath with ASP.NET C#. 我是在ASP.NET C#中使用Xpath的新手。 I have a Gridview and am able to Insert/Edit/Delete data from an xml file. 我有一个Gridview并能够从xml文件中插入/编辑/删除数据。 However I need to be able to perform the same task using a more complicated xml file. 但是,我需要能够使用更复杂的xml文件执行相同的任务。 Could someone help me get started as to how I would go about implementing the Xpath Functionality into my code? 有人可以帮助我开始如何在代码中实现Xpath功能吗?

using the following xml ex.1, all functions as expected : 使用以下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>

...however, I need to perform the same actions using the following xml ex.2 file, Note: The actual file consist of more, but am just using the following for testing: ...但是,我需要使用以下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>

...Code behind - I've included the header directives System.Xml and System.Xml.Xpath (snippet) ...背后的代码-我已包含标头指令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;
}

...the rest are just my functions for insert/edit/ delete, etc, which works fine ...其余只是我的插入/编辑/删除等功能,效果很好

.....The Gridview: ..... 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>  

...when I run the page using ex.2 - I get a error: System.Data.DataRowView' does not contain a property with the name 'PartID - Could someone please provide me with some direction as to how I would go about using Xpath to resolve this issue? ...当我使用ex.2运行页面时-我收到一个错误:System.Data.DataRowView'不包含名称为'PartID'的属性-有人可以向我提供有关如何操作的指示使用Xpath解决此问题?

It will work if you change 如果您进行更改,它将起作用

gvPartNumber.DataSource = dsgvPartNumber;

to

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

Probably you have overlooked the second xml is returning two tables in the dataset which is normal behavior. 可能您忽略了第二个xml返回数据集中的两个表,这是正常行为。 When you are setting your gridview source to this dataset, it is using default table (pos) to bind and data binding fails. 当您将gridview源设置为此数据集时,它正在使用默认表(pos)进行绑定,并且数据绑定失败。

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

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