2012-10-12 25 views
0

在我的應用程序,我在ASPX定義將XmlDataSource:設置XMLDataSource.XPath不記得

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

這個數據源飼料的網格。

在我的代碼,我設置的XPath在特定功能的特定點,然後發出對的XmlDataSource一個新的數據綁定(),使得電網更新:

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

與大多數數據源控件一樣,XmlDataSource節點不存儲在viewState中。您應該只調用一次數據綁定,並且控件應該在回發時自動重建。如果您想更改數據源,您可以將ViewSate中的selectedNode保存爲treeviw,在回發時,在分配DataSourceID並調用DataBind()之前,通過檢索viewState中的值更改數據源。 看一看這裏:

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

+0

感謝。鏈接提到這是出於安全原因,這是有道理的。看到我手動填寫xPath,我現在將它存儲在一個變量中,然後稍後使用它來查找正確的節點。 – SchmitzIT