0

この MSDN リンクのコードを使用して、DataTable を DataSource として GridView に並べ替えを実装しました。ただし、列をクリックすると初めてグリッドが並べ替えられ、その後、他の列をクリックしても並べ替えられません。

PageLoad() イベントのコード -

if (!Page.IsPostBack)
{
      HView hv = new HView ();
      DataTable HTable = new DataTable("hTable");
      HTable = hv.FillTable();
      Session["hTable"] = HTable;
      GridView2.DataSource = Session["hTable"];
      GridView2.DataBind();
}    

Sorting イベントのコード -

    protected void GridView2_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable notesDT = Session["hTable"] as DataTable;
        if (notesDT != null)
        {                
            notesDT.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortDirection);                
            GridView2.DataSource = Session["hTable"];
            GridView2.DataBind();
        }
    }

私が間違っているかもしれないことを誰かが知っていますか?

編集:私はこれを実現しました。特定の行を選択すると、その行に関する詳細が表示される別のビューが表示されます。列をソートする前に最初にいくつかの行の詳細を表示すると、ソートは何度でも完全に正常に機能します。ただし、行を選択する前にソートしようとすると、一度しか機能しません。

4

2 に答える 2

0

データテーブルをセッションに保存する必要はありません。実際には、データテーブル全体をセッションに入れることはまったく良い考えではありません。その特別な理由はありますか?

于 2012-05-10T18:02:03.223 に答える
0

並べ替えイベントでDataTableasを使用していますが、代わりに並べ替えられたビューを使用する必要があります。DataSourceビューを並べ替えても、テーブル内のデータの並べ替え順序は変更されず、ビュー内の順序のみが変更されます。

protected void GridView2_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable notesDT = Session["hTable"] as DataTable;
    if (notesDT != null)
    {                
        notesDT.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortDirection);                
        GridView2.DataSource = notesDT.DefaultView;
        GridView2.DataBind();
    }
}

編集: MSDNの同じコードを使用していることに気付きましたが。

ビューから新しい DataTable を作成することもできます。

GridView2.DataSource = notesDT.DefaultView.ToTable(true);
于 2012-05-10T15:03:52.130 に答える