0

PageLoad イベントで動的にロードするツリー ビューがあります。これが私のツリー ビューとデータ ソースです。

<asp:TreeView ID="tv" runat="server" DataSourceID="xds"
    SelectedNodeStyle-ForeColor="Red" NodeStyle-ForeColor="Black">   
    <DataBindings>
        <asp:TreeNodeBinding DataMember="Node"
            ValueField="Id" TextField="Title"  />
    </DataBindings>
</asp:TreeView>
<asp:XmlDataSource ID="xds" runat="server" EnableCaching="false" />

これは私が PageLoad で実行するコードです

StringBuilder sb = new StringBuilder();
XmlWriter xw = XmlWriter.Create(sb);

WriteTreeViewXml(xw);
xw.Flush();
xw.Close();

xds.Data = sb.ToString();
xds.DataBind();

tv.Nodes[0].Selected = true;  // error here

これは正常に機能し、ツリー ビューが正しく読み込まれます。今、SelectedNode にスタイリングを追加しようとしています。これは、特定のノードをクリックすると機能しますが、ページの読み込み時にルート ノードのスタイルが設定されません。だから私はPageLoadで選択されたルートノードを設定しようとしています

ルート ノードを選択済みとして設定しようとすると、次のエラーが発生します。

インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。パラメータ名:インデックス

データ ソースをバインドした後、何らかの理由でツリー ビューが空になります。

誰も私がこれを行う方法を知っていますか?

4

2 に答える 2

1

xds.DataBind(); を呼び出す行の後に tv.Databind() を呼び出す必要があります。それ以外の場合、コントロールはデータソースにバインドされていません。XmlDataSource を宣言的に (たとえば、静的ファイルに) 設定している場合は、これが行われると思いますが、手動で設定しているため、コントロールの DataBind メソッドも手動で呼び出す必要があります。

于 2012-09-26T21:34:48.583 に答える
1

コントロールのDataBindingイベントが実行されるまで、データは存在しません。これは、Loadイベント中に発生する場合と発生しない場合があります。DataBoundコントロールのイベントに存在するデータ/ノードを必要とするコードを配置する必要があります。このドキュメントを参照してください:

データバインド

データ バインド コントロールでのデータ バインディング操作の最後に発生します。GridView コントロールでは、すべての行とすべての子コントロールに対してデータ バインディングが完了します。

このイベントを使用して、データ バインドされたコンテンツをフォーマットしたり、現在のコントロールのコンテンツの値に依存する他のコントロールでデータ バインドを開始したりします。(詳細については、このトピックの「追加されたコントロールのキャッチアップ イベント」を参照してください。)

于 2012-09-24T19:32:38.977 に答える