0

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sorting.aspx

この記事では、最初にデータテーブルを作成し、次にそれからグリッドビューを作成して、並べ替えを支援します。私の苦境は少し異なります。

Page_Load でデータソースを ArrayList に設定し、バインドする Gridview があります。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            this.GridView1.DataSource = RequestManager.Instance.GetAllRequests();
            this.GridView1.DataBind();
        }
    }

この GridView を並べ替えたいので、aspx ページで、AllowSorting="true" と OnSorting="GridView1_Sorting" を設定します。ここまでは順調ですね。BoundFields に SortExpressions が設定されており、それをクリックすると、_Sorting イベントがトリガーされることがわかります。

これはポストバック操作であるため、グリッドビューのデータソースを単純に DataTable にキャストして並べ替えることはできません。ViewState への保存はオプションですが、その方法がわかりません。

DataTable が利用できないことを除いて、このページの簡単なソリューションを使用したいと思います。ご覧いただきありがとうございます。

4

1 に答える 1

0

.NET v3.5 をターゲットにできる場合は、Linq を使用することをお勧めします。_Sorting イベント ハンドラーで、Page_Load で行った配列リストを取得し、再バインドします。

たとえば、配列リストに含まれる型が、MyTypeDefault および SomeField という名前のプロパティを持つインスタンスである場合:

protected void Grid_Sorting(object sender, GridViewSortEventArgs e)
{
  Func<MyType, object> keySelector;
  if(e.SortExpresion == "SomeField")
  {
    keySelector = dataItem => dataItem.SomeField;
  }
  else
  {
    keySelector = dataItem => dataItem.Default;
  }
  ArrayList dataItems = RequestManager.Instance.GetAllRequests();
  this.GridView1.DataSource = dataItems.OfType<MyType>().OrderBy(keySelector);
  this.GridView1.DataBind();
}

これで開始し、後で並べ替え式を調べて、それが ASC または DESC で終わっているかどうかを確認し、条件付きで を呼び出します.OrderByDescending(keySelector)

最後に、リストを ViewState に隠しておくことはお勧めしませんObjectStateFormatterhttp://msdn.microsoft.com/en-us/library/system.web.ui.objectstateformatter.aspx

代わりに ASP.NET キャッシュを検討してください。

于 2012-11-14T02:20:32.093 に答える