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 (snippet)

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

0

如果你改变它会起作用

gvPartNumber.DataSource = dsgvPartNumber;

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

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

于 2013-08-05T23:41:32.880 回答