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を明示的に設定した後、XPathがXMLDataSourceafdterに保持されない理由について少し混乱しています。誰かが私のためにこれに光を当ててもらえますか?

4

1 に答える 1

1

XmlDataSourceノードは、ほとんどのデータソースコントロールのように、viewStateに保存されません。databindを1回だけ呼び出す必要があり、コントロールはポストバック時に自動的に再構築する必要があります。データソースを変更する場合は、選択したノードをtreeviwからViewstateに保存し、ポストバック時に、DataSourceIDを割り当ててDataBind()を呼び出す前に、viewStateから値を取得してdataSourceを変更できます。ここを見てください:

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

于 2012-10-12T15:58:51.503 に答える