不记住在代码中设置XMLDataSource.XPath

时间:2012-10-12 15:34:37

标签: c# xpath xmldatasource

在我的应用程序中,我在ASPX中定义了一个XMLDataSource:

<asp:XmlDataSource ID="XmlThickness" runat="server"
    DataFile="~/XML/Data/products.xml" EnableCaching="False" 
    EnableViewState="False" 
    ></asp:XmlDataSource>

此数据源为网格提供信息。

在我的代码中,我将XPath设置在特定函数中的特定点,然后在XMLDataSource上发出一个新的DataBound(),导致网格更新:

XmlThickness.XPath = "/Item[@label='" + tvwMaterials.SelectedNode.Text + "']/Thickness/Thick";
XmlThickness.DataBind();

所有这些都很有魅力,但是当我尝试从不同的函数中读出XPAth时,我收到一条错误消息。

XmlNode thick = myDataSource.SelectSingleNode(XmlThickness.XPath.ToString());

调试显示XPath表达式实际上是空的。

我尝试将DataSource的创建移动到代码,然后才设置网格的DataSourceID,但这不起作用。

在尝试此操作之前,我在XMLDataSource定义中定义了一个默认的XPath,此时,XMLNode thick行返回了此默认字符串。

我有点困惑为什么XPath没有保留在XMLDataSource afdter我在前面的函数中显式设置它。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

与大多数数据源控件一样,XmlDataSource节点不存储在viewState中。您应该只调用一次数据绑定,控件应该在回发时自动重建。我想要更改数据源,你可以在Viewstate中将selectedNode表单保存在treeviw中,在回发时,在分配DataSourceID并调用DataBind()之前,通过从viewState中检索值来更改dataSource。 看看这里:

http://forums.asp.net/t/1437802.aspx/1