0

我有几个使用存储过程绑定到 SqlDataSources 的 Gridviews 和 Repeater。我正在尝试在其中一些中实现排序功能,但是很难找到具体的说明和/或 SqlDataSource 端生成所需的 ORDER BY 所需的示例。特别是,如果它所做的只是手动连接到存储过程中的 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 并发现了这个问题。在做了更多搜索之后,我想我现在找到了正确的答案。

Microsofts page Sorting Data with Data Source Controls说如下(我的重点):

由 SortParameterName 属性标识的参数传递给 ObjectDataSource 控件的 SelectMethod 或作为参数集合的一部分传递给 SqlDataSource 控件的 SelectCommand。ObjectDataSource 控件可以使用在 sort 参数中传递给它的信息以排序顺序返回数据。对于 SqlDataSource 控件,您必须提供可以采用排序参数并返回排序数据的存储过程的名称,因为您不能将参数作为 ORDER BY 子句的一部分传递。

这表明伊卡洛斯给出的答案是不正确的。

我的结论是,当设置了 SortParameterName 属性(结合适当的存储过程)时,Gridview 不会自己进行排序,而是让数据源进行所谓的自定义排序,例如,这将是排序的必要方式如果使用自定义分页。

更新:
我现在已经在自己的编程中使用了它,并确认我的结论是正确的。

于 2014-02-13T03:29:06.893 回答
0

我过去从未使用SortParamter过,但我从文档中收集到的是,此参数的目的是允许您以您希望的方式对结果进行排序,以防存储过程尚未执行此操作。除此之外,您无需将其用于任何事情。其数据源类型为 SqlDataSource 的 GridView 已经实现了开箱即用的排序。您只需将 AllowSorting属性设置为TrueSortExpression每一列。

例子:

 <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 和它的排序功能,然后将 Repeaters/GridViews 绑定到排序的 DataView。无论如何,您仍然必须跟踪 ViewState 中的 SortDirection 和 SortParameter。

于 2012-08-24T18:36:40.903 回答