15

を含む GridView があり、ObjectDataSourceそれを並べ替えられるようにしたいと考えています。

ページングは​​正しく機能しますが、並べ替えでは例外が発生します。

GridViewgridViewは、処理されなかった並べ替えイベントを発生させました。

サーバー側で並べ替えを有効にするにはどうすればよいですか?

(つまり、gridView.EnableSortingAndPagingCallbacksfalse のままにする必要があります)

4

4 に答える 4

20

gridView.AllowSorting プロパティを true に設定します。ここから、IBindingList を実装するオブジェクトを使用している場合、グリッドはポストバック時にデータを自動的にソートできるようにする必要があります。ただし、そうではない可能性が高いため、上記の TheTXI のアドバイスに従って、並べ替えイベントを自分で処理する必要があります。次のように、分離コードで GridView.Sorting イベントを配線します。

gridView.Sorting += new GridViewSortEventHandler(gridView_Sorting); 

次のように、gridView_Sorting メソッド内で並べ替えを処理します。

private void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
     //Sorting logic here
}

また、コントロールにアタッチされた OnSort="gridView_Sorting" を使用して、ページ自体にイベントを接続することもできます。

gridView.EnableSortingAndPagingCallbacks を false に設定しているため、ユーザーが並べ替えを試みてもすぐには起動されず、サーバーへのポストバックを待機することに注意してください。

これが役立つことを願っています!

編集:

ObjectDataSource は選択の仲介者のように思われるので、ここでは並べ替えの配線についても簡単に説明します。ページで次を使用します (完全な例は、MSDN の下部にあります)

<asp:GridView ID="TestGridView" runat="server" DataSourceID="ObjectDataSourceTest"
        AllowSorting="True">
    </asp:GridView>
    <asp:ObjectDataSource ID="ObjectDataSourceTest" runat="server" 
        SelectMethod="SelectMethod" 
        TypeName="Samples.AspNet.CS.SortingData" 
        SortParameterName="sortExpression">
    </asp:ObjectDataSource>

gridView.Sorting イベントを実際に使用する代わりに、ObjectDataSource にジャンプして並べ替えを処理します。並べ替えがトリガーされると、コード ビハインドの SelectMethod にあるメソッドを呼び出す必要があります。次に、SelectMethod 内で、次のように GridView オブジェクトの再構築を処理します。

public void SelectMethod(string sortExpression)
{
     //Rebuild gridView table if necessary, same method used in 
     //on a postback, and retrieve data from the database. Once
     //completed sort the data with:

     gridView.Sort(sortExpression, SortDirection.(Ascending or Descending))
}
于 2009-06-16T18:08:31.320 に答える
7

私は Linq2Sql と ObjectDataSource を使用しており、ページングと並べ替えが非常にうまく機能します。

ObjectDataSource として使用する Class を実装しました。これには、 Linq2SQLクエリを使用して DB からデータを取得するビジネス レイヤーを呼び出す Select メソッドと Count メソッドがあります。select メソッドは、最初のアイテム インデックス、ページ サイズ、および並べ替え式をパラメーターとして自動的に取得します。

public List<EntityClass> Select(int startIndex, int pageSize, string sortBy) {}
public int Count() {}

ASPX では、DataSource は次のように構成されます。

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"  
     SelectMethod="Select" EnablePaging="true"
     StartRowIndexParameterName="startIndex" 
     MaximumRowsParameterName="pageSize"
     SortParameterName="sortBy" SelectCountMethod="Count" >   
</asp:ObjectDataSource>

Select メソッドと Count メソッドは、Linq クエリを使用して DB からデータを取得します。Skip()、Take()Orderby()メソッドを使用します。OrderBy が文字列の並べ替え式を受け入れるようにするには、DynamicLinqを使用します。コーディングする必要はほとんどありません。データバインディング、ページング、および並べ替えは自動的に機能します。

于 2010-06-11T10:43:16.147 に答える
2

SortExpression呼び出すデータ アクセス層のメソッドを渡して、StoredProcedure ウェイ SP の下に記述し、SQL での並べ替えを処理します。このようにして、ソートのパフォーマンスを向上させることができます。

データベース SP:

Select ROW_NUMBER() OVER(ORDER BY   '+@sortExpression +' ) as RowNum
,* from (SELECT CUSTOMERID,  
LEDGERDESCRIPTION,  
CustomerDescription as CustomerName
WHERE REGIONID ='''+@RegionID+''')t
order by RowNum'
于 2012-06-19T11:06:07.757 に答える
0

OrderBy選択した列でこれを使用するためにLINQを使用できます。次のようにします。

    public static List<YourDataObject> GetSortedData(string orderBy)
    {
        List<YourDataObject> sortedDataList = new List<YourDataObject>();

        switch (orderBy)
        {
            case "Col1": sortedEmployeeList = GetDefaultObjects().OrderBy(x => x.Col1).ToList();
                break;
            case "Col2": 
                         //Do this for all columns
            default:
                sortedEmployeeList = GetDefaultObjects();
                break;
        }

        return sortedEmployeeList;
    }

これはSelect、オブジェクト データ ソースのメソッドで行われます。

GridView で、並べ替えキーを追加します。SelectParameterオブジェクト データ ソースに「orderBy」を追加します。

<asp:GridView AllowSorting="true" DataSourceID="objDsAllObjects" ....>
<Columns>
         <asp:BoundField SortExpression="Col1"/>
         <!-- Do this for all columns -->
</Columns>
</asp:GridView >

<asp:ObjectDataSource ID="objDsAllObjects" SortParameterName="orderBy" runat="server" 
SelectMethod="GetAllEmployees" TypeName="YourObjectClass"></asp:ObjectDataSource>

DALレイヤーとストアドプロシージャを変更せずにうまくいきました。

于 2014-12-04T15:52:54.033 に答える