0

ストアドプロシージャをデータソースとして使用するグリッドビューをソート可能にしようとしていますが、これを達成するために毎回クエリを再実行したくありません。現在のコードを機能させる方法は次のとおりです。

protected override void OnPreRender(EventArgs e)
{
    if (!IsPostBack)
    {
    SqlCommand cmd2 = new SqlCommand("SR_Student_Course_List", new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["RDCV2ConnectionString"].ConnectionString));
    try
    {
        cmd2.CommandType = CommandType.StoredProcedure;
        cmd2.CommandTimeout = 120;
        cmd2.Parameters.Add("student_id", SqlDbType.Char, 11).Value = student;
        cmd2.Connection.Open();
        grdCourses.DataSource = cmd2.ExecuteReader();
        grdCourses.DataSourceID = string.Empty;
        grdCourses.DataBind();
    } finally
    {
        cmd2.Connection.Close();
        cmd2.Connection.Dispose();
        cmd2.Dispose();
    }}}

このコードは、ポストバックでない場合にデータをバインドするだけで、グリッドビューでビューステートが有効になっています。列ヘッダーを押すと、ポストバックが発生しますが、並べ替えは発生しません。誰かがこれに対する簡単な修正を持っている場合は、私に知らせてください。ポストバックを回避する ajax ソートがさらに良いでしょう。データセットは比較的小さいですが、クエリに時間がかかるため、並べ替えごとに再クエリを実行したくありません。

4

3 に答える 3

4

結果をページングせず、読み取りのみを行う場合は、jquery tablesorter プラグインのようなものですばやく簡単に修正できます。私はこれを最大1400行のテーブルで使用しており、うまく機能しますが、遅いputasではおそらく数百の方が優れています。

グリッドビューが編集可能な場合、クライアント スクリプトなどの適切な登録を行わないと、aspnet イベント/入力検証でダミーが吐き出される可能性があります。

于 2008-11-18T01:47:56.173 に答える
0

あなたの場合、私はSqlDataAdapterを使用して、DataTableに入力します。次に、DataTableをSession変数に入れます。GridViewがソートしているときに、Session変数がまだ存在するかどうかを確認します。そうでない場合は、DataTableに再度入力します。最後に、DataViewを使用してDataTableを並べ替え、GridViewをDataViewで再バインドします。

于 2008-11-18T02:26:19.417 に答える
0

データをビュー ステート (またはキャッシュ) に保存してみてください。

于 2008-11-18T00:50:08.660 に答える