Сброс полосы прокрутки в GridView в ASP.NET

Я использую GridView и ListBox на странице. Gridview содержит данные из базы данных как DataSource. При щелчке по элементу в GridView в списке отображаются подпункты.

Моя проблема возникает, когда в GridView есть полоса прокрутки. Когда я выбираю последний элемент в представлении сетки, отображаются вложенные элементы и полоса прокрутки поднимается. Я не вижу, какой элемент выбран.


person Sauron    schedule 16.06.2009    source источник


Ответы (3)


Предлагаю вам прочитать ответы на вопрос Сбросить позицию прокрутки после асинхронной обратной передачи - ASP.NET

person Bogdan_Ch    schedule 16.06.2009

Вам нужно будет сгенерировать идентификаторы строк или записать позицию прокрутки перед обратной передачей. Используйте функцию javascript

yourGridId.scrollTo(x,y) 

и передать предыдущие позиции x и y, которые вы сохранили до обратной передачи.

Сохраните значения в скрытом поле, чтобы к нему можно было получить доступ на стороне сервера.

person Hemanshu Bhojak    schedule 16.06.2009

РЕШЕНИЕ:

Поместите скрытое поле как

<input type="hidden" id="hdnScrollTop" runat="server" value="0" /> 

и в div добавить функцию

<div id="dvScroll" onscroll="$get('ctl00_ContentPlaceHolder1_hdnScrollTop').value = this.scrollTop;">

JavaScript:

var prm = Sys.WebForms.PageRequestManager.getInstance();         
prm.add_pageLoaded(pageLoaded);
prm.add_beginRequest(beginRequest);
var postbackElement;
function beginRequest(sender, args) {
   postbackElement = args.get_postBackElement();
}
function pageLoaded(sender, args)  {
   var updatedPanels = args.get_panelsUpdated();
   if (typeof (postbackElement) == "undefined") {
      return;
   }
   if (postbackElement.id.indexOf('gridViewList') > -1) {
     try {
         $get("divScroll").scrollTop = $get("ctl00_ContentPlaceHolder1__hdnScrollTop").value;
     }
     catch (Err) {
     }
}}

Это решило мою проблему.

person Sauron    schedule 17.06.2009