ObjectDataSource在gridview外部使用,没有传递起始,页面大小或排序

本文关键字:排序 外部 gridview ObjectDataSource | 更新日期: 2023-09-27 18:06:21

我有一个与GridView绑定的现有ObjectDataSource,该GridView生成数据的html表示。需要为不同的输出类型(pdf、excel等)添加按钮,所以我想很好,我将使用相同的数据源来合并所有过滤参数,然后我只需调用ObjectDataSource.Select()来获取数据集并运行不同的例程来执行输出。

在大多数情况下,它是有效的,但是由于某些原因,我在onselection中为排序表达式、起始索引和页面大小设置的参数没有传递给选择方法。

举一些例子,数据源看起来像这样:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetUsers"
    EnableCaching="false" TypeName="App.UserManager"
    EnablePaging="True" SelectCountMethod="GetUsersByParamCount"
    OnSelecting="SetFilterInputs" SortParameterName="sortedBy" />

(页面大小和开始索引参数名称默认分别为maximumRows和startRowIndex)。在onselection方法中,我输入

if ((object)ButtonClicked == (object)GeneratePdfButton)
{
    inputParams.Add("startRowIndex", 0);
    inputParams.Add("maximumRows", UserGridView.PageSize);
}

那么实际的button click方法有

if ((object)ButtonClicked == (object)GeneratePdfReportButton)
{
    IEnumerable<UserItem> results = (IEnumerable<UserItem>)ObjectDataSource1.Select();
    ... go create pdf output from the data set.

我已经通过我的onselection方法,并开始索引和页面大小值被设置,但是当ObjectDataSource1.Select()结束在SelectMethod,所有的过滤器输入设置正确,除了startRowIndex, maximumRows和sortedBy -那些来作为0,0,和"分别。

我读了一堆关于数据源配置和参数传递的帖子。有人说gridview的值会覆盖你声明的默认值。

但是我没有看到任何关于直接调用ObjectDataSource.Select()或为什么这些参数(即使在onselection方法的e.InputParameters中设置)将被单独丢弃。就像我说的,所有其他过滤器参数都被正确传递——只有默认的分页参数没有。

我确实仔细检查了ObjectDataSource。EnablePaging = true

谁有什么提示?

谢谢

ObjectDataSource在gridview外部使用,没有传递起始,页面大小或排序

好吧,这有点拼凑,但是我们已经编写了很多代码来处理我们所有的自定义过滤器,这就是为什么我不想浪费它。

请参阅上面的注释,了解我对ObjectDataSource.Select()的了解,以及当您直接调用它时{排序表达式,开始索引和页面大小}如何/为什么会被彻底淘汰。

直接对其他输出格式使用ObjectDataSource.Select()的快速(非常)肮脏的方法是添加2个转移注意力的参数(在我的例子中,我希望其他输出格式的起始索引为0)。

当单击其他输出格式按钮时,我将ObjectDataSource上的排序表达式和页面大小参数名称重命名为红点(例如SortX和MaxX),并像往常一样填写常规值。存根ObjectDataSourceView将把这些不相干的内容添加到参数列表

如果它是html输出,绑定到gridview,那么我自己将转移注意力的参数添加到集合中,以便保持平衡。

所以现在我可以直接使用ObjectDataSource来驱动所有其他的,不可绑定的容器输出格式。