[英]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>
<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.