在我的应用程序中,我在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我在前面的函数中显式设置它。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
与大多数数据源控件一样,XmlDataSource节点不存储在viewState中。您应该只调用一次数据绑定,控件应该在回发时自动重建。我想要更改数据源,你可以在Viewstate中将selectedNode表单保存在treeviw中,在回发时,在分配DataSourceID并调用DataBind()之前,通过从viewState中检索值来更改dataSource。 看看这里: