ОК, поэтому я понимаю, как использовать подкачку элемента управления ASP.net GridView. Вы устанавливаете различные методы, чтобы позволить элементу управления получать подмножество данных и общее количество сопоставленных записей. Вот мой код инициализации на данный момент:
ObjectDataSource dataSource = new ObjectDataSource();
dataSource.EnablePaging = true;
dataSource.SelectParameters.Add(new Parameter("customerId", TypeCode.Int32, customerId.ToString()));
dataSource.SelectMethod = "SelectSomeRecords";
dataSource.StartRowIndexParameterName = "startRowIndex";
dataSource.MaximumRowsParameterName = "maximumRows";
dataSource.SelectCountMethod = "SelectAllRecordsCount";
dataSource.TypeName = "Name.Of.Data.Class";
grdUserList.DataSource = dataSource;
grdUserList.DataBind();
Это работает в том смысле, что в мой класс данных передается идентификатор клиента, для которого я показываю пользователей, а также начальный индекс строки и максимальное количество строк. Но одна вещь меня озадачивает. Почему элемент управления хочет отдельный метод для SelectCountMethod
? На уровне базы данных у меня есть сохраненный процесс, который возвращает общее количество совпавших строк в качестве выходного параметра, а также запрошенное подмножество. Было бы намного проще, если бы DataGrid просто позволил моему SelectMethod
вернуть целое число, указывающее общее количество записей, сопоставленных до применения startRowIndex
и maximumRows
.
Эта страница MSDN , по-видимому, предлагает (в ее примерах) хранить число записей в HttpRuntime.Cache
со сроком действия 5 минут. Это кажется мне далеко от идеального решения. У вас есть потенциально 5-минутные данные, которые вполне могли измениться, когда вы могли просто получить общее количество записей, совпадающих с тем, когда вы называете SelectMethod
! В любом случае, вы захотите получить эту информацию одновременно с рендерингом постраничного элемента управления.
Мои вопросы: есть ли способ заставить GridView получить свою цифру «все записи» одновременно с вызовом «метода выбора», либо через возвращаемое значение, либо через параметр out? Если нет, то как бы вы предложили обойти это странное требование наличия двух методов для этих двух частей данных, учитывая, что я получу свою цифру «все записи», когда я позвоню SelectMethod
? В данный момент я склоняюсь к тому, чтобы сохранить это значение в Session, установить его в SelectMethod
и просто вернуть его в SelectCountMethod
.