powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Положение полосы прокрутки в tablePane
7 сообщений из 7, страница 1 из 1
Положение полосы прокрутки в tablePane
    #37354623
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть tablePane, настроены fixedHeaders="true" и bodyHeight="20em".

Предположим пользователь добавляет запись в таблицу, я ее визуально выделяю, но из-за того-что запись находится намного ниже области ограниченной bodyHeight, пользователю, чтобы увидеть запись приходится смещать полосу прокрутки вниз, что не совсем удобно..
Вопрос: можно ли полосой как-то управлять, задавать свои координаты, смещать ее так, чтобы сразу была видна добавленная и выделенная запись?



-----------------------------------------------
А мы тут плюшками балуемся...

Аленочка тм
...
Рейтинг: 0 / 0
Положение полосы прокрутки в tablePane
    #37354846
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочкаможно ли полосой как-то управлять, задавать свои координаты, смещать ее так, чтобы сразу была видна добавленная и выделенная запись?
Вот пример такого "управления"...
http://www.grizun.com/post/view/17/
...
Рейтинг: 0 / 0
Положение полосы прокрутки в tablePane
    #37669840
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все-таки скролл поддается дрессировке :-)
Скопирую сюда текст рассылки, который писала своим коллегам-разработчикам. Может кому еще пригодится.

Для выделения записей в таблице существует несколько вариантов:

Вариант 1: устанавливает value для таблицы, и если данное value находится на текущей выбранной пользователем странице в tablePane, визуально эту запись подсвечивает.

var table = zen('tblSections');
table.value = id;
table.executeQuery(true);

Вариант 2: устанавливает номер текущей выбранной строки, num - номер строки, нумерация начинается с 0, при useSnapshot="false" нумерация идет отдельно в рамках каждой страницы.

var table = zen('tblSections');
table.setProperty('selectedIndex',num)

Вариант 3: позволяет перемещать скролл (вверх, вниз) в таблице таким образом, чтобы подсвеченная запись (с определенным порядковым номером) была видна. Работает только при useSnapshot="false" и fixedHeaders="true".

var table = zen('tblSections');
table.selectRow(num,true);

{ Описание есть в документации классов:

Class %ZEN.Component.simpleTablePane Extends (component, querySource) [ Abstract, Inheritance = right ]

/// Client-side method to select the given row (0-based) in the table.
/// If <var>scroll</var> is true, scroll the new row into view.
/// If <var>which</var> is present, it is passed along to the user event notification.
ClientMethod selectRow(row, scroll, which) [ Language = javascript ]

}

Такое решение неудобно тем, что привязано к настройкам таблицы и для перемещения скролла требуется знать порядковый номер записи.

Вычислить порядковый номер записи довольно просто, зная исходный запрос в tablePane. Н-р с помощью такого метода:

Зен-метод:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
/// Узнать номер строки в таблице
ClassMethod GetRowNum(id As %String) As %String [ ZenMethod ]
{
	set num = 0
	set sql = "SELECT ID FROM my_doc.Class ORDER BY FieldName ASC"
	set rs=##class(%ResultSet.SQL).%Prepare(.sql,.err,"")		  
	if '$ISOBJECT(err) {
		while rs.%Next() {
			set rsid = rs.%Get("ID")
			if rsid'=id { set num = num + 1} else { quit }
		}
	}
	quit num
}


Клиентский метод:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
ClientMethod showRecord() [ Language = javascript ]
{
...
	var num = zenPage.GetRowNum(id);
	table.selectRow(num,true);
...
}
...
Рейтинг: 0 / 0
Положение полосы прокрутки в tablePane
    #37669932
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка, есть еще метод DOM scrollIntoView()
Код: javascript
1.
2.
3.
4.
5.
6.
7.
var $g=function( /*String*/ id ){
 return document.getElementById(id) || ""; 
};

function setVisible( /*String*/ id, /*Boolean*/ top ){ 
  $g(id).scrollIntoView();  //мне повезет
};
...
Рейтинг: 0 / 0
Положение полосы прокрутки в tablePane
    #38022696
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас пользуемся следующим кодом:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
var zsm = zenSynchronousMode;
zenSynchronousMode = true;
	
zen('table').executeQuery(true);	
zen('table').selectRow(zen('table').selectedIndex,true);

zenSynchronousMode = zsm;
...
Рейтинг: 0 / 0
Положение полосы прокрутки в tablePane
    #38119714
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка,

1. Перед рефрешем таблицы сохраняем в СТРАНИЧНУЮ переменную выбранную строку, примерно так:

zenPage.lastSelectedIndex = zen('table').selectedIndex

* Тут лучше использовать массив (чтобы для всех таблиц), но ЛЕНЬ ;)

2. "Таким образом следовательно", при обновлении таблицы работаем примерно так:

zenPage.lastSelectedIndex = zen('table').selectedIndex
а уж потом(!)
zen('table').executeQuery()

3. А на таблицу вешаем

onrefresh="zen('table').selectRow(zenPage.lastSelectedIndex,true);"

ВУАЛЯ!

Результат гарантированн! И никаких zenSynchronousMode брррр...
...
Рейтинг: 0 / 0
Положение полосы прокрутки в tablePane
    #38119722
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
за гарантироваНН прошу прощения
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Положение полосы прокрутки в tablePane
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]