2012-01-25 15 views
1

WebGridを作成していて、並べ替えを有効にしようとしています。実際には、ソートは機能しますが、columnNameが空白でない列については、grid.columns呼び出しでしかソートできないことがわかります。だから私の例では、私はこの持っている:このexamppleでWebGridを使用した並べ替え

@grid.GetHtml(
    columns: grid.Columns(
     grid.Column(columnName: "", header: "Item title", format: @<text> @GetItemTitle(@item.InventoryReference) </text>), 
     grid.Column(columnName: "OwnerReference", header: "Owner reference") 
    ) 
); 

を、アイテムのタイトルがソート可能ではなく、所有者の参照があります。質問は、どのようにアイテムのタイトルをソート可能にするのですか?これはどうしてですか?

答えて

3

カスタムフォーマットを使用した列では、自分で並べ替える必要があります。以下のようになります。コントローラのアクションに送信されます

grid.Column(
    columnName: "title", 
    header: "Item title", 
    format: @<text> @GetItemTitle(@item.InventoryReference) </text> 
), 

、クエリをクリックすると、この列のヘッダー:あなたのカスタム列サーバー上で、それを識別するために使用される名前を与える必要がありますので、これは:

/controller/action/?sort=title&sortdir=ASC 

このように、この情報を使用してデータセットをソートします。

public ActionResult Foo(string sort, string sortdir) 
{ 
    // check if sort = title and then sort your dataset accordingly 
    // before returning the model to the view 
    ... 
} 

WebGridのヘルパーが自動的にそれを表示する前にデータセットをソートすることが可能であるため、カスタム書式を定義していないそのための列の作品を並べ替える理由があるが、ソートやページングのようなものが必要があるので、それは明らかに悪いです効率的な並べ替えとページングを行うために、バックエンドのレイヤー(たとえば、データベースを使用している場合はデータベースなど)で行う必要があります。したがって、カスタムフォーマットのない列の場合でも、WebGridヘルパーを使用して表示する前にデータセットをソート/ページするのではなく、データベースレベルで並べ替え/ページングを実行する必要があります。

0

私のケースでは、フォーマットされた列にcolumnNameを指定するだけでデフォルトのソートができました。

ソートとページングは​​サーバー側で行う必要があるという事実に同意しますが、WebGridにわずかなパラメータしか提供しないと便利です。

よろしくお願いします。

関連する問題