0

ストアド プロシージャを使用して、いくつかの Gridviews と Repeater を SqlDataSources にバインドしています。これらのいくつかに並べ替え機能を実装しようとしていますが、必要な ORDER BY を生成するために SqlDataSource 側で必要なものの具体的な指示や例を見つけるのに苦労しています。特に、ストアド プロシージャの ORDER BY 句に手動で接続するだけの場合、SqlDataSource に SortParameterName プロパティを設定する意味がわかりません。SelectParameters リスト内の別のパラメーターであるのに、たまたま ORDER BY 句に接続されているのに、なぜそのように定義するのでしょうか。以下のコード例を実行すると、指定された引数が多すぎると言われます (明らかに、余分な SortParams 引数)。ストアド プロシージャを変更して "

    SqlDataSourceInLine.SelectParameters.Clear()
    SqlDataSourceInLine.SelectCommandType = SqlDataSourceCommandType.StoredProcedure
    SqlDataSourceInLine.SelectCommand = "ApproverGetApproved"
    SqlDataSourceInLine.SelectParameters.Add("CompanyID", ConfigurationManager.AppSettings("Temp_CompanyID"))
    SqlDataSourceInLine.SelectParameters.Add("SortParams", "EmpName DESC")
    SqlDataSourceInLine.DataSourceMode = SqlDataSourceMode.DataSet
    SqlDataSourceInLine.SortParameterName = "SortParams"
    Dim dv As DataView = SqlDataSourceInLine.Select(DataSourceSelectArguments.Empty

説明をいただければ幸いです。

4

3 に答える 3

3

SortParameterName の使用方法を理解しようとしていたところ、この質問が見つかりました。さらに検索を行った後、正しい答えを見つけたと思います。

MicrosoftのページSort Data with Data Source Controlsは次のように述べています(私の強調):

SortParameterName プロパティによって識別されるパラメーターは、ObjectDataSource コントロールの SelectMethodに渡されるか、パラメーター コレクションの一部として SqlDataSource コントロールの SelectCommand に渡されます。ObjectDataSource コントロールは、並べ替えパラメーターで渡された情報を使用して、並べ替えられた順序でデータを返すことができます。SqlDataSource コントロールの場合、ORDER BY 句の一部としてパラメーターを渡すことができないため、並べ替えパラメーターを受け取り、並べ替えられたデータを返すことができるストアド プロシージャの名前を指定する必要があります。

これは、イカロスの答えが正しくないことを示しています。

私の結論は、SortParameterName プロパティが設定されている場合 (適切なストアド プロシージャと組み合わせて)、Gridview は並べ替え自体を実行しませんが、データソースがいわゆるカスタム並べ替えを実行できるようにすることです。これは、たとえば並べ替えに必要な方法です。カスタム ページングが使用されている場合。

更新:
私は自分のプログラミングでそれを使用し、私の結論が正しいことを確認しました。

于 2014-02-13T03:29:06.893 に答える
0

過去に を使用したことはありませんが、ドキュメントからSortParamter収集したことは、このパラメーターの目的は、ストアド プロシージャがまだ実行していない場合に、必要な方法で並べ替えられた結果を取得できるようにすることです。それ以外には、何にも使用する必要はありません。データソースが SqlDataSource 型である GridView は、すぐに使用できる並べ替えを既に実装しています。プロパティをすべての列に設定するだけです 。AllowSortingTrueSortExpression

例:

 <asp:GridView ID=" productsGridView" Runat="server" 
     DataSourceID="SqlproductDataSource" AutoGenerateColumns="False"
        AllowSorting="True" >
        <Columns>
            <asp:BoundField HeaderText="Product" 
              DataField="ProductName" SortExpression="ProductName">
            </asp:BoundField>
  ...
于 2012-08-24T14:40:37.457 に答える
0

SqlDataSource では何も必要ありません。リピーターには並べ替えが組み込まれていないため、Gridview には Sorting イベントを実装する必要があり、リピーターにはその他の何かを実装する必要があります。(小さなデータセットが戻ってくる場合) できることは、ViewState を使用して結果の DataTable を保存し、次に、DataView とその並べ替え機能を利用し、Repeater/GridViews を並べ替えられた DataView にバインドします。とにかく、ViewState 内の SortDirection と SortParameter を追跡する必要があります。

于 2012-08-24T18:36:40.903 に答える