1

並べ替えが有効になっている更新パネルにグリッドビューがあり、次のようなイベントハンドラーがあります。

protected void MyGridSort(object sender, GridViewSortEventArgs e)
{
   var TheDirection = (e.SortDirection).ToString();
   var TheColumn = (e.SortExpression).ToString();
}

これらの行の直後にブレークポイントを設定します。列ヘッダーを押すたびに、変数TheDirectionは常に昇順を示しています。

なぜ昇順から降順、そして逆戻りしないのですか?

ありがとう。

4

2 に答える 2

2

私は読んでいますが、グリッドビューにデータソースを手動で提供していると、並べ替えが壊れているようです。それがあなたの場合かどうかはわかりませんが、これは私にとってはうまくいきます。

string strSortExpression = e.SortExpression + " ASC";
if (Convert.ToString(ViewState["SortExpression"]) == strSortExpression)
{
    strSortExpression = e.SortExpression + " DESC";
}
ViewState["SortExpression"] = strSortExpression;


//This is done by sorting the Default View of the underlying data and then re-binding this
//to the grid.
System.Data.DataTable myData = HttpContext.Current.Session["GridData"] as System.Data.DataTable;
if (myData != null)
{
   myData.DefaultView.Sort = strSortExpression;
   GridView1.DataSource = myData;
   GridView1.DataBind();
}

それが役に立てば幸い

于 2011-06-01T19:03:40.503 に答える
0

ViewStateまたはSessionで方向を維持できます。このように(テストされていないコード):

protected void MyGridSort(object sender, GridViewSortEventArgs e)
{
   var TheDirection = (e.SortDirection).ToString();
   var TheColumn = (e.SortExpression).ToString();

   string prevColumn = "", prevDirection = "";

   if (Session["MyGridSortColumn"] != null)
      prevColumn = Session["MyGridSortColumn"].ToString();
   if (Session["MyGridSortDirection"] != null)
      prevDirection = Session["MyGridSortDirection"].ToString();

   if (TheColumn == prevColumn) {
      if (prevDirection == "ASC")
         TheDirection = "DESC";
      else
         TheDirection = "ASC";
   }

   Session["MyGridSortDirection"] = TheDirection;
   Session["MyGridSortColumn"] = TheColumn;

}
于 2011-02-02T03:04:16.680 に答える