0

データバインドされたコントロールの値を取得するためのベスト プラクティスを見つけようとしています。私のアプリケーションが現在 (そして通常) 動作する方法は、ページの読み込み時に getSettings() などを呼び出し、DropDownLists または Repeater のそれぞれに対してデータベース呼び出しを行います。

今回は、クリックされたボタンに応じてデータを DropDownList にバインドします。アプリがデータベースに移動して必要な情報を取得する間、データが表示されるまでに遅延があります。

おそらくページが読み込まれるたびにデータベース呼び出しを行わずに、値の取得を処理するより良い方法があるかどうか疑問に思っています。念のため、いくつかのサンプルコードを含めました。

.aspx:

<asp:DropDownList ID="ddl" runat="server"></asp:DropDownList>
<asp:Button ID="btn1" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table1" />
<asp:Button ID="btn2" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table2" />
<asp:Button ID="btn3" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table3" />
<asp:Button ID="btn4" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table4" />

コードビハインド:

DBClass dbc = new DBClass();

protected void btn_Command (object sender, CommandEventArgs e){
    if (e.CommandName == "change"){
        ddl.DataSource = dbc.ExecuteQuery("SELECT * FROM " + e.CommandArgument);
        ddl.DataTextField = "Text";
        ddl.DataValueField = "Value";
        ddl.DataBind();
    }
}

結果をキャッシュする方法はありますか? これは DropDownList が 1 つしかないので大まかですが、ボタンごとに 1 つある場合でも、4 つのデータベース呼び出しを行わずにデータを取得する方法はありますか?

前もって感謝します。

4

3 に答える 3

0

jQuery ajax を使用してこれを行う方法を見つけました。クライアント側のボタンをクリックすると、HTMLサーバー側でフォーマットされた必要な値がWebMethod. もう少し作業が必要ですが、すべてのポストバックを削除し、不要または使用しないポストバックをロードします。

みんな、ありがとう!

于 2011-10-14T14:42:34.970 に答える
0

これらの値をアプリケーション変数に保存し、一度だけ取得することができますApplication_StartupMicrosoftの簡単な例を参照してください。

Global.asax

protected void Application_Start(object sender, EventArgs e)
{
    DBClass dbc = new DBClass();
    Application["table1"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table1");
    Application["table2"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table2");
    // ...
}

コードビハインド

protected void btn_Command (object sender, CommandEventArgs e)
{
    if (e.CommandName == "change")
    {
        ddl.DataSource = Application[e.CommandArgument] as IEnumerable<TResult>;
        ddl.DataTextField = "Text";
        ddl.DataValueField = "Value";
        ddl.DataBind();
    }
}
于 2011-08-30T13:20:29.187 に答える
0

複数の結果セットを返すようにクエリを変更し、結果を DataSet に入力することができます。DataSet がロードされると、DataSet 内の各 DataTable を対応する DropDown にバインドできます。

必要に応じて、結果をキャッシュしたり、アプリケーション状態にすることもできます。ただし、クエリのマージを検討します。

于 2011-08-30T13:31:17.647 に答える