Как использовать DataPager с пейджингом на стороне сервера?

Я пытаюсь использовать DataPager для пейджинга на стороне сервера. Вот мой код

<asp:DataPager ID="pgrFooBars" PagedControlID="lvFooBars" 
    QueryStringField="page" runat="server" >
<Fields>
    <asp:NumericPagerField />
</Fields>
</asp:DataPager>

Код позади

protected void Page_Load(object sender, EventArgs e)
{
    ConfigureBlogPostListView();
}

private void ConfigureBlogPostListView()
{
    int pageNum;
    int.TryParse(Request.Params["page"], out pageNum);
    int pageSize = 20;

    PagedList<IFooBar> FooBars = FooService.GetPagedFooBars(
        new PagingSettings(pageNum, pageSize));

    ListViewPagedDataSource ds = new ListViewPagedDataSource();
    ds.AllowServerPaging = true;
    ds.DataSource = FooBars;
    ds.MaximumRows = pageSize;
    ds.StartRowIndex = pageNum;
    //TotalCount is the total number of records in the entire set, not just those loaded.
    ds.TotalRowCount = FooBars.TotalCount;

    lvFooBars.DataSource = ds;
    lvFooBars.DataBind();

    pgrFooBars.PageSize = pageSize;
    pgrFooBars.SetPageProperties(pageNum, FooBars.TotalCount, true);
}

PagedList взят из полезного поста RobConeryhttp://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/.

Проблема заключается в том, что DataPager, по-видимому, использует свойство Count в ListView для определения общего количества записей, которое в данном случае равно 20. Почему-то необходимо знать, что существует 1500, а не 20 записей. DataPager имеет свойство TotalRowCount, но оно доступно только для чтения.

Я никогда не видел пример DataPager с пейджингом на стороне сервера, но предполагал, что он мог бы выполнять пейджинг на стороне сервера, иначе что хорошего в атрибуте QueryStringField?

Я знаю, что вы можете создать собственное пейджинговое решение, используя методологию, подобную тому, что 4GuysFromRolla сделал здесьhttp://www.4guysfromrolla.com/articles/031506-1.aspx, но сначала я хотел бы узнать, возможно ли решение с помощью DataPager, прежде чем создавать собственное решение.

ОБНОВИТЬ Чем больше я на это смотрю, тем больше я прихожу к выводу, что это невозможно и что, к сожалению, DataPager - это элемент управления, предназначенный только для небольших веб-сайтов. То, что я хочу сделать, должно быть довольно простым, если элемент управления был построен правильно. Я хочу быть в состоянии сказать

dpFooBars.TotalRowCountComputed = false;
dpFooBars.TotalRowCount = AnyNumberThatISoChoose;

Я искал какой-нибудь хак для достижения той же цели, но похоже, что TotalRowCount хранилища данных вычисляется из фактического количества элементов в источнике данных, к которому он привязан. Мне кажется очень странным, что Microsoft создаст класс ListViewPagedDataSource () и DataPager одновременно и не даст им правильно работать вместе, но, похоже, именно это и произошло.

ОБНОВЛЕНИЕ 2 (АГА МОМЕНТ?) Похоже, что со времени .Net 2.0 стало возможно выполнять подкачку на стороне сервера, используя ObjectDataSource и настраивая SelectCountMethod (). Я считаю, что должна быть возможность настроить ObjectDataSource в соответствии с моими потребностями. Хммм. Я уезжаю на выходные, так что у меня будет пара дней, чтобы посмотреть, сработает ли это. Оставайтесь с нами, истинно верующие.

Ответы на вопрос(3)

Ваш ответ на вопрос