は基本的にCollapsiblePanelExtenderはそれがポストバック中の状態だ保つ: これは私がこれまで試みられてきたものです。しかしポストバック中は、データバインドを実行すると思います(私はあなたが持っていると思います)。データバインディング中は、すべてのコントロールが再作成され、その理由で内部状態が緩やかになります。
問題を解決するには、データバインディングを実行する前にCollapsiblePanelExtenderの状態を保存してから、この状態を復元することをアドバイスできます。これはサーバー側で行うことができます。アニメーションを有効にしている場合は、UIのちらつきを避けるためにも役立ちます。
したがって、CollapsiblePanelExtenderの状態を取得するには、クライアントの状態値を覚えておくだけです。その後、この値を復元することができます。あなたはまだあなたがこのようなコードを必要とするよりも、クライアント側でCollapsiblePanelExtenderを拡張/折りたたむする場合
// To collapse panel.
this.CollapsiblePanelExtender1.ClientState = "true";
// To Expand panel.
this.CollapsiblePanelExtender1.ClientState = "false";
:たとえば、これは/サーバー側でCollapsiblePanelExtenderを折りたたむ拡張するために使用できるコードです
Sys.Application.add_load(function() {
var extender = $find('<%= this.CollapsiblePanelExtender1.ClientID %>');
extender.expandPanel();
extender.collapsePanel();
});
EDIT これは、クリックハンドラで状態を復元しようとしたために役立ちません。グリッドビューコントロールのデータバインドを呼び出すと、行は直ちに再作成されません。したがって、折りたたみ可能なエクステンダーコントロールの状態を設定(復元)する場合は、グリッドのRowCreatedイベントハンドラーで行う方がよいでしょう。 asp.netは私がRepeaterコントロールで折りたたみ可能なパネルドラッグ&ドロップを使用することができますので、私は実際に私のブログ上でこれらを使用
protected void GridView_OnRowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && SomeValueToIdentifyThatThisPanelShouldBeExpanded)
{
CollapsiblePanelExtender extender =
e.Row.FindControl("CollapsiblePanelExtender1") as CollapsiblePanelExtender;
extender.ClientState = "false";
}
}
にSuppressPostBack =「true」を設定してみてくださいました。私があなたに言ったように、折りたたみ可能なパネルエクステンダーは、gridviewテンプレート上にあります。だから私はfindcontrolを使う必要があります。私は自分のコンテキストにajaxコントロールツールキットを追加しています。折りたたみ可能なパネルを見つけるためのコードを書いています。その後、CollapsiblePanelExtender1を設定します。 ClientState = "false"は、私が持っているonclick関数の最後です。残念ながら、折りたたみパネルはポストバックの後で再び閉じられます – focus
@focus私は自分の答えを更新しました。編集セクションをご覧ください。 –
これは、すべての行に展開可能なパネルを開きます。私は、gridviewの特定の行に展開可能なパネルを開きたいと思います。ソリューションをすべての行で開きます。 – focus