我有几个Gridview和Repeater使用存储过程绑定到SqlDataSources。我正在尝试将排序功能实现到其中一些中,但是很难找到具体的指令和/或SqlDataSource端需要生成所需ORDER BY的示例。特别是,我不明白在SqlDataSource中有一个SortParameterName属性,如果它只是手动连接到存储过程中的ORDER BY子句。为什么如果它只是SelectParameters列表中的另一个参数,就像任何其他参数一样定义它,但恰好连接到ORDER BY子句?当我运行下面的代码示例时,我被告知指定了太多的参数(显然,额外的SortParams参数)。我是否真的需要更改我的存储过程并在现有查询的末尾添加“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
任何澄清都将不胜感激!
答案 0 :(得分:3)
我只是想弄清楚如何使用SortParameterName并找到了这个问题。在做了一些搜索之后,我想我现在找到了正确的答案。
微软页面Sorting Data with Data Source Controls如下(我的重点):
SortParameterName属性标识的参数传递给ObjectDataSource控件的SelectMethod或作为参数集合的一部分传递给SqlDataSource控件的SelectCommand。 ObjectDataSource控件可以使用在sort参数中传递给它的信息,以按排序顺序返回数据。 对于SqlDataSource控件,您必须提供可以获取sort参数并返回已排序数据的存储过程的名称,,因为您不能将参数作为ORDER BY子句的一部分传递。
这表明伊卡洛斯给出的答案是不正确的。
我的结论是,当设置SortParameterName属性(与适当的存储过程结合)时,Gridview本身不会进行排序,但会让数据源执行所谓的自定义排序,例如,这将是必要的如果使用自定义分页,则排序方式。
<强>更新强>
我现在在自己的编程中使用它并确认我的结论是正确的。
答案 1 :(得分:0)
我以前从未使用SortParamter
,但我收集from the documentation的原因是此参数的目的是让您以您希望的方式对结果进行排序< strong>如果存储过程尚未执行此操作。除此之外,您不需要将其用于任何操作。其数据源类型为SqlDataSource的GridView已经实现了开箱即用的排序。您只需将AllowSorting
属性设置为True
,并将SortExpression
设置为每列。
示例:
<asp:GridView ID=" productsGridView" Runat="server"
DataSourceID="SqlproductDataSource" AutoGenerateColumns="False"
AllowSorting="True" >
<Columns>
<asp:BoundField HeaderText="Product"
DataField="ProductName" SortExpression="ProductName">
</asp:BoundField>
...
答案 2 :(得分:0)
SqlDataSource不需要任何内容。您需要为Gridview实现Sorting事件,并为转发器实现其他内容,因为它们没有内置排序。您可以做什么(如果您有小数据集返回)是使用ViewState并存储DataTable结果和然后利用DataView及其排序功能,然后将Repeaters / GridViews绑定到已排序的DataView。无论如何,您仍然必须跟踪ViewState中的SortDirection和SortParameter。