Форум: "Базы";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Внизобновление dxDBGrid... Найти похожие ветки
← →
MakNik (2005-08-02 10:41) [0]Подскажите, пожалуйста, как при обновлении датасета на который ссылается dxDBGrid, визуально текущую выбранную записть установить в то же положение?
Например: есть набор данных из 50 строк. На экране отображены строки с 10-30. Указатель стоит на 15-й строке (т.е. визуально на 5-й сверху). Нужно сохранить это положение при обновлении датасета.
← →
Sergey13 © (2005-08-02 10:50) [1]И чего этот вопрос так всех беспокоит?
← →
Johnmen © (2005-08-02 10:53) [2]>Sergey13 © (02.08.05 10:50) [1]
>И чего этот вопрос так всех беспокоит?
Не, не всех, только начинающих, не пропитанных идеологией...:)
← →
Sergey13 © (2005-08-02 11:04) [3]2 [2] Johnmen © (02.08.05 10:53)
Согласен. Перегнул. 8-)
← →
AndrewK (2005-08-02 11:21) [4]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:26) [5]2[4] AndrewK (02.08.05 11:21)
Вопрос был про то чтобы грид "не дергался".
← →
Johnmen © (2005-08-02 11:29) [6]>AndrewK (02.08.05 11:21) [4]
>2Johnmen: А как решается такой вопрос у пропитанных идеологией гуру?
Никак не решается. Забивается на него, как на малозначительный и бесполезный, из области рюшечек...
← →
AndrewK (2005-08-02 12:22) [7]>Sergey13: Если так, то совсем другое дело. Значит я не правильно его понял.
>Johnmen: :). Нормальное решение. Поддерживаю.
← →
MakNik (2005-08-02 16:02) [8]
> Johnmen © (02.08.05 11:29) [6]
... именно хотельсь бы чтобы грид "не дергался"
← →
Sergey13 © (2005-08-02 16:24) [9]2[8] MakNik (02.08.05 16:02)
> ... именно хотельсь бы чтобы грид "не дергался"
Сам по себе он не дергается. А если его специально дергают, то нечего пенять на реакцию.
Забей на это. И будет счастье. 8-)
← →
msguns © (2005-08-02 17:03) [10]>MakNik (02.08.05 16:02) [8]
>... именно хотельсь бы чтобы грид "не дергался"
При работе в сети грид будет "дергаться" по-любому.
Если все же очень хоцца оставлять после переоткрытия НД не только активную запись (Locate), но и позицию ее относительно грида, можно создать класс от TCustomGrid, у которого открыты св-ва TopRow и RowCount и, "добираясь" через него к любимому TDBGrid, выставить эту запись в "старую" строку грида. Однако занятие это неблагодарное, т.к. другие узера могут, например, удалить другие записи, из-за чего текущая физически не сможет быть там же.
Честно говоря, желание странное. Если не сказать - каприз ;))
← →
MakNik (2005-08-02 17:26) [11]... что касается других юзеров, редактирующих данные - тут все понятно и притензий нет...
... в остальном, же... возможно и каприз... но пользователи просит, значит нужно постараться... уж больно часто им приходится обновлять данные...
← →
Sergey13 © (2005-08-02 17:33) [12]2 [11] MakNik (02.08.05 17:26)
> уж больно часто им приходится обновлять данные...
А это тема для отдельного разговора.
← →
evvcom © (2005-08-03 09:19) [13]
> уж больно часто им приходится обновлять данные...
Что значит часто? Если они сами жмут на кнопку Refresh, то вполне должны ожидать, что grid сейчас передернется. Если ты сам делаешь этот рефреш после каждого обновления/вставки записи, то тут уже ты сам виноват, неправильно это делаешь и вопрос надо ставить по-другому.
← →
Maximus2002 (2005-08-03 09:26) [14]var
Book: TPointer;
begin
Book := Grid.DataSource.DataSet.GetBookmark
Grid.DisableControl;
DataSet.close;
Dataset.open;
Grid.DataSource.Dataset.SetBookmark(Book);
Grid.EnableControl;
end;
← →
Johnmen © (2005-08-03 09:37) [15]>Maximus2002 (03.08.05 09:26) [14]
Просьба не постить сюда не относящиеся к делу фрагменты бесполезного неработающего кода с бредовыми ошибками.
← →
evvcom © (2005-08-03 09:37) [16]
> Maximus2002 (03.08.05 09:26) [14]
Ты наверняка встанешь даже не на ту запись, не говоря уже о Top Line в гриде.
← →
msguns © (2005-08-03 10:21) [17]>evvcom © (03.08.05 09:37) [16]
>> Maximus2002 (03.08.05 09:26) [14]
>Ты наверняка встанешь даже не на ту запись, не говоря уже о Top Line в гриде.
Он вообще никуда не встанет хотя бы потому, что у грида нету ни DisableControl, ни даже DisableControls
;)
← →
evvcom © (2005-08-03 10:32) [18]
> что у грида нету ни DisableControl
А... ну да. Не обратил на это внимания. :)
← →
MakNik (2005-08-04 11:35) [19]... и все же... какие еще есть варианты решения даной проблемы (кроме как "забить" )?...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c