0

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;
}

...残りは、挿入/編集/削除などの機能であり、正常に機能します

.....グリッドビュー:

<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 を使用していますか?

4

1 に答える 1