2

グリッドビュー(実際にはSPgridview)があります

そして、ユーザーがデータを使用して行を並べ替えることができるように、列名をクリック可能にしました。そして、それはうまくいきます。

この問題は、ユーザーがデータを並べ替えた後に行を選択しようとすると発生します。gridviewは、行がどのようにソートされたかを「忘れて」、ソートされる前にクリックされたインデックスにあった行を選択していることがわかります。

どうすれば修正できますか?ユーザーが行を選択した後、行を再度並べ替えようとしましたが、うまくいかないようです。そして、gridviewはそれがちょうどソートされたという事実を覚えているべきですか?

前もって感謝します :)

4

6 に答える 6

3

Sorting イベントを処理するときに、セッション変数を設定してソート方向に設定し、データソースを再バインドするときに使用します。

protected void gridview_Sorting()
{
    // BIND DATA Function
    BindData();

    DataTable dt = gridview.DataSource as DataTable;

    if (dt != null)
    {
        //Sort the data.
        dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);

        Session["sort"] = dt.DefaultView.Sort;
        gridview.DataSource = dt;
        gridview.DataBind();
    }
}





// bind data function//

private void BindData()
{

    DataTable dt = GetDataTable();

    if (Session["sort"] != null)
    {
        //Sort the data.
        dt.DefaultView.Sort = Session["sort"].ToString();
    }

    gridview.DataSource = dt;
    gridview.DataBind();
}
于 2011-01-16T13:06:42.820 に答える
2

ポストバック後にグリッドを再バインドしていないことを確認してください。

if(!IsPostBack)
{
  gridView.DataSource = yourDataSource;
  gridView.DataBind();
}
于 2009-05-15T19:15:38.833 に答える
1

私は並べ替え可能な GridView をいくつか作成しましたが、この問題に遭遇した今日まで、行コマンドの相互作用を備えたものはありませんでした。私のはSPgridviewではなく、「プレーンな」GridViewです。私はこれがうまくいくことを発見しました:

  1. bindData() で、DataTable を作成して Session オブジェクトに配置していない場合は、そうします。それ以外の場合は、既存の並べ替えられた DataTable を使用します。
if (Session["dtbl"] == null) {
  Session["dtbl"] = method_to_fetch_datatable();
}
gv.DataSource = Session["dtbl"] as DataTable;
gv.DataBind();
  1. 基になるデータを INSERT、UPDATE、または DELETE する行コマンドの GridView の処理では、Session オブジェクトを更新し、並べ替えがあればそれを維持します。
Session["dtbl"] = method_to_fetch_datatable();
if (ViewState["SortExpression"] != null) {
  DataTable dt = Session["dtbl"] as DataTable;
  dt.DefaultView.Sort = ViewState["SortExpression"] as string;
}
bindData();
于 2011-04-20T16:37:10.970 に答える
1

SPGridView と LinqDataSourceに関する Johans ブログを確認してください

于 2009-05-22T11:44:28.303 に答える
1

選択した行を行インデックスまたは編集するデータの一意の識別子で取得していますか? 行インデックスで取得している場合は、OnPostBack でグリッドを再作成しているため、「忘れている」可能性があります。データを反復処理して、行インデックスではなく一意の ID で選択してみてください。

于 2009-05-15T19:37:43.663 に答える
0

私はそれを動かしました。(ちょっと)

並べ替えイベントで、sortexpression(並べ替えに使用される列の名前)とsortdirectionの昇順または降順を保存しました。

次に、gridviewとdatabindのデータソースを作成し、データバインディングした後、gridview.sortコマンドを使用して、ビューステートに保存した値で並べ替えます。

それは問題なく動作しますが、問題は1つだけです。並べ替えるときに、同じ列を2回以上押した後、方向を切り替えました。これで、列のタイトルを押し続けていると思われるため、並べ替えが逆になり続けます。

しかし、私は一時的にそれを一方向にのみソートさせました。そして今、並べ替えイベントで送信者オブジェクトを操作しています。イベントの原因に関する情報を取得できれば、送信者に基づいて方向を切り替えるように指示できると考えています。

ありがとう :)

于 2009-05-15T20:16:59.357 に答える