0

在我的应用程序中,我在 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 中,因为我在前面的函数中明确设置了它。有人可以为我解释一下吗?

4

1 回答 1

1

XmlDataSource 节点不像大多数数据源控件那样存储在 viewState 中。您应该只调用一次 databind,并且控件应该在回发时自动重建自身。如果您想更改数据源,您可以在 Viewstate 中从 treeviw 中保存 selectedNode,然后在回发时,通过从 viewState 中检索值来更改您的数据源,然后再分配 DataSourceID 并调用 DataBind()。看看这里:

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

于 2012-10-12T15:58:51.503 回答