在我的应用程序中,我在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没有保留它。有人能帮我解释一下吗?
发布于 2012-10-12 23:58:52
与大多数数据源控件不同,XmlDataSource节点不存储在viewState中。应该只调用一次databind,并且控件应该在回发时自动重新生成自身。如果你想改变数据源,你可以在视图状态中从树中保存selectedNode,在回发时,在你赋值DataSourceID并调用DataBind()之前,通过从Viewstate中检索值来改变你的DataSourceID。看看这里:
http://forums.asp.net/t/1437802.aspx/1
https://stackoverflow.com/questions/12862464
复制相似问题