Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

обновление dxDBGrid... [D5, MSSQL]


MakNik ©   (2005-08-02 10:41:00) 

Подскажите, пожалуйста, как при обновлении датасета на который ссылается dxDBGrid, визуально текущую выбранную записть установить в то же положение?
Например: есть набор данных из 50 строк. На экране отображены строки с 10-30. Указатель стоит на 15-й строке (т.е. визуально на 5-й сверху). Нужно сохранить это положение при обновлении датасета.


MakNik   (2005-08-04 11:35:00) [1]

... и все же...  какие еще есть варианты решения даной проблемы (кроме как "забить" )?...


evvcom   (2005-08-03 10:32:00) [2]


> что у грида нету ни DisableControl

А... ну да. Не обратил на это внимания. :)


msguns   (2005-08-03 10:21:00) [3]

>evvcom ©   (03.08.05 09:37) [16]
>> Maximus2002   (03.08.05 09:26) [14]
>Ты наверняка встанешь даже не на ту запись, не говоря уже о Top Line в гриде.

Он вообще никуда не встанет хотя бы потому, что у грида нету ни DisableControl, ни даже DisableControl s
;)


evvcom   (2005-08-03 09:37:00) [4]


> Maximus2002   (03.08.05 09:26) [14]

Ты наверняка встанешь даже не на ту запись, не говоря уже о Top Line в гриде.


Johnmen   (2005-08-03 09:37:00) [5]

>Maximus2002   (03.08.05 09:26) [14]

Просьба не постить сюда не относящиеся к делу фрагменты бесполезного неработающего кода с бредовыми ошибками.


Maximus2002   (2005-08-03 09:26:00) [6]

var
 Book: TPointer;
begin
Book := Grid.DataSource.DataSet.GetBookmark
Grid.DisableControl;
DataSet.close;
Dataset.open;
Grid.DataSource.Dataset.SetBookmark(Book);
Grid.EnableControl;
end;


evvcom   (2005-08-03 09:19:00) [7]


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

Что значит часто? Если они сами жмут на кнопку Refresh, то вполне должны ожидать, что grid сейчас передернется. Если ты сам делаешь этот рефреш после каждого обновления/вставки записи, то тут уже ты сам виноват, неправильно это делаешь и вопрос надо ставить по-другому.


Sergey13   (2005-08-02 17:33:00) [8]

2 [11] MakNik   (02.08.05 17:26)
> уж больно часто им приходится обновлять данные...
А это тема для отдельного разговора.


MakNik   (2005-08-02 17:26:00) [9]

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


msguns   (2005-08-02 17:03:00) [10]

>MakNik   (02.08.05 16:02) [8]
>... именно хотельсь бы чтобы грид "не дергался"

При работе в сети грид будет "дергаться" по-любому.
Если все же очень хоцца оставлять после переоткрытия НД не только активную запись (Locate), но и позицию ее относительно грида, можно создать класс от TCustomGrid, у которого открыты св-ва TopRow и RowCount и, "добираясь" через него к любимому TDBGrid, выставить эту запись в "старую" строку грида. Однако занятие это неблагодарное, т.к. другие узера могут, например, удалить другие записи, из-за чего текущая физически не сможет быть там же.

Честно говоря, желание странное. Если не сказать - каприз ;))


Sergey13   (2005-08-02 16:24:00) [11]

2[8] MakNik   (02.08.05 16:02)
> ... именно хотельсь бы чтобы грид "не дергался"
Сам по себе он не дергается. А если его специально дергают, то нечего пенять на реакцию.
Забей на это. И будет счастье. 8-)


MakNik   (2005-08-02 16:02:00) [12]


> Johnmen ©   (02.08.05 11:29) [6]

... именно хотельсь бы чтобы грид "не дергался"


AndrewK   (2005-08-02 12:22:00) [13]

>Sergey13:  Если так, то совсем другое дело. Значит я не правильно его понял.

>Johnmen:  :).  Нормальное решение. Поддерживаю.


Johnmen   (2005-08-02 11:29:00) [14]

>AndrewK   (02.08.05 11:21) [4]
>2Johnmen:  А как решается такой вопрос у пропитанных идеологией гуру?

Никак не решается. Забивается на него, как на малозначительный и бесполезный, из области рюшечек...


Sergey13   (2005-08-02 11:26:00) [15]

2[4] AndrewK   (02.08.05 11:21)
Вопрос был про то чтобы грид "не дергался".


AndrewK   (2005-08-02 11:21:00) [16]

2Johnmen:  А как решается такой вопрос у пропитанных идеологией гуру?

2all:

Немного уточню вопрос.

Допустим есть выборка, к примеру перечень каких-нибудь документов. Документ правиться в дополнительной форме. После правки реестр надо изменить (закрыв и открыв DataSet). В результате курсор позиционируется на первую запись. Приходиться заново искать запись. Не удобно.

2MakNik:

Как решать.  
В выборке необходимо наличие какого-либо уникального поля (или группы полей, что неудобнее).

Алгоритм такой

1. Сохраняем значение уникального поля
2. Закрываем DataSet
3. Открываем DataSet
4. Позиционируем на позицию со значением уникального поля равным сохраненному.

Пример кода.


procedure TfrmMain.Refresh;
var
 CurrRecord : Integer;
begin
 with DataSource.DataSet do
 try
   DisableControls;
   CurrRecord := FieldByName('ID').AsInteger;
   Close;
   Open;
   Locate ('ID', CurrRecord, [loCaseInsensitive]);
 finally
   EnableControls;
 end;
end;


Sergey13   (2005-08-02 11:04:00) [17]

2 [2] Johnmen ©   (02.08.05 10:53)
Согласен. Перегнул. 8-)


Johnmen   (2005-08-02 10:53:00) [18]

>Sergey13 ©   (02.08.05 10:50) [1]
>И чего этот вопрос так всех беспокоит?

Не, не всех, только начинающих, не пропитанных идеологией...:)


Sergey13   (2005-08-02 10:50:00) [19]

И чего этот вопрос так всех беспокоит?


Наверх

Титульная страница Поиск, карта сайта Написать письмо