Я использую C #, .NET 3.5. У меня есть элемент управления GridView с динамически привязанным источником данных, и я динамически устанавливаю размер страницы в обработчике событий Page_Load. Я установил AllowPaging = true для элемента управления. Пейджинг GridView работает нормально, однако размер страницы, установленный в Page_Load, не вступает в силу при первой загрузке страницы. При первой загрузке страницы на ней всегда будет отображаться 10 строк независимо от установленного мной свойства GridView.PageSize (5, 15 и т. Д.). После первого раза (возврат страницы) размер страницы вступает в силу, и все работает должным образом.

Размер страницы - это свойство главной страницы, которое я получаю из файла web.Config в настройках приложения.

Я не уверен, почему размер страницы gridView не вступает в силу в первый раз. Должен ли я устанавливать размер страницы в другом событии, кроме Page_Load. Кроме того, я устанавливаю его всегда, даже если это обратная передача. Я запускаю страницу с помощью внутреннего веб-сервера. Есть идеи, что происходит?

Код позади (GridView1.AllowPaging = true на странице aspx):

  protected void Page_Load(object sender, System.EventArgs e)
  {
                        DataView dvMembers = GetMembers;

                        GridView1.DataSource = dvMembers;   
                        GridView1.PageSize = Master.GridViewSize;
  }

Свойство главной страницы:

public int GridViewSize
    {
        get { return Convert.ToInt32 
                (ConfigurationManager.AppSettings ["memberDataGridPageSize"]); } 
    }
0
Pritika 21 Окт 2009 в 20:35

3 ответа

Лучший ответ

Событие PageLoad вашей дочерней страницы вызывается перед событием PageLoad вашей главной страницы. Следовательно, если вы устанавливаете Master.GridViewSize в событии PageLoad главной страницы, оно не устанавливается до второго PostBack.

Было бы лучше загрузить GridViewSize на ранней стадии жизненного цикла страницы, а затем сохранить его в сеансе.

2
Jason Berkan 21 Окт 2009 в 20:59
Master.GridViewSize является свойством главной страницы и не устанавливается в событии Page_Load. И когда я отлаживаю страницу содержимого, чтобы увидеть ее значение в обработчике события Page_Load, оно уже установлено. Так что я не думаю, что это проблема. Как вы думаете, в каком событии мне следует установить размер страницы сетки?
 – 
Pritika
21 Окт 2009 в 21:47
Если значение установлено в первый раз, проблема не в этом. Что произойдет, если вы жестко закодируете PageSize?
 – 
Jason Berkan
21 Окт 2009 в 23:39
Кроме того, где ваш вызов GridView1.DataBind () или Page.DataBind ()?
 – 
Jason Berkan
21 Окт 2009 в 23:42
Привет, Джейсон, GridViewBind происходит внутри метода GetMembers перед установкой pageSize на основе некоторой логики. Теперь я вызываю Page.DataBind () после установки размера страницы и ее работы. Спасибо за вашу помощь.
 – 
Pritika
22 Окт 2009 в 00:11

В вашем определении разбивки на страницы для GridView установлено первое связывание данных, но не второе, если происходит обратная передача. (По умолчанию разбиение на страницы отсутствует) Вам необходимо установить разбиение на страницы для GridView на странице aspx.

Попробуйте вот так

<asp:GridView ID="GridView1" PageSize='<%$ AppSettings:memberDataGridPageSize %>' ..>

Также знайте, что если вы запускаете проект ASP.NET 3.5, вы можете использовать элемент управления DataPager с расширением GridView, есть пример, который разработал Мэтт Берсет здесь.

0
Myra 21 Окт 2009 в 21:30
Я устанавливаю размер страницы и источник данных в обработчике событий Page_load независимо от того, является ли это обратной передачей или нет. Поэтому я не уверен, почему между первой и последующей обратной передачей есть разница. Спасибо за ваше предложение вставить размер страницы в сам код ASPX, но я хотел бы узнать, что происходит с моим текущим кодом, когда я устанавливаю размер страницы в коде позади.
 – 
Pritika
21 Окт 2009 в 21:50

Отсутствовал метод PageBind после установки Pagesize. Добавление этого, и все работает нормально. Я привязывал элемент управления перед установкой размера страницы, и я предполагаю, что это значение сохранялось после первого раза и впоследствии использовалось при обратной передаче, но не в первый раз.

Спасибо Джейсону Беркану за указание на это.

0
Pritika 22 Окт 2009 в 00:14
Не стесняйтесь принять этот ответ, чтобы позже люди, которые будут искать этот вопрос, могли легко найти ответ.
 – 
Jason Berkan
22 Окт 2009 в 01:14