Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» DBGrid?

Автор: BigBoBo1
Дата сообщения: 01.08.2003 13:57
Как программно перескакивать на нужное поле(колонку) ?
Автор: ironwit
Дата сообщения: 01.08.2003 14:16
Specifies the field component for the currently selected cell in the grid.

Delphi syntax:

property SelectedField: TField;

C++ syntax:

__property Db::TField* SelectedField = {read=GetSelectedField, write=SetSelectedField};

Description

Set SelectedField to move focus to a particular field in the grid. Read SelectedField to obtain access to the field component for the currently selected cell. If there is not currently selected cell, SelectedField is nil (Delphi) or NULL (C++). For example, when an entire row is selected, SelectedField is nil or NULL.

Пойдет?
Автор: BigBoBo1
Дата сообщения: 04.08.2003 11:36
Пойдёт.
DBGrid1->SelectedField = DataModule2->ADOTableSalesDetail->FieldByName("");
Автор: RWSergey
Дата сообщения: 04.08.2003 11:48
BigBoBo1

На Delphi можно так

MyDBGrid.SelectedIndex := MyDBGrid.SelectedIndex + 1;

Колонки DBGrid индексируются с 0, поэтому SelectedIndex := 0 даст вам первую колонку. Свойство FieldCount вернет вам количество колонок


Сразу же вопрос:

Волюю судеб в базе в текущей записи поменялись данные. Мне нужно их увидить в Grid -e. Запрос такой что RefreshRecord применить невозможно (Можно но нужное поле он не обновляет) поэтому делаем Refresh? но при этом текущей становится первая запись. Даже если я сохраню позицию, всюрявно произойдёт скачок в Grid - e. Если RecNo использовать то текущая запись становится первой, а если Locate то точно посередине.

Кто-нибудь знает как избавиться от таких скачков.
Нужно очень.

Автор: ironwit
Дата сообщения: 04.08.2003 12:16
RWSergey
ты на время какой то работы с записями - отвязывай от dbgrid его. На нем ничего не будет видно конечно, зато не будет и скачков(да и обрабатывать будет быстрее).
Автор: RWSergey
Дата сообщения: 05.08.2003 03:02
Нет ты меня непонял. Grid нельзя отвязывать, он всегда действующий. У меня Grid с галочками пользователь снимает эту галочку или устанавливает заново. И в этот момент происходит скачок потому что приходится проводить обноление.
Автор: ironwit
Дата сообщения: 05.08.2003 11:21
RWSergey
давай код, что она делает после галочки. Может это можно как то обойти?
Автор: MaximSG
Дата сообщения: 05.08.2003 12:49
RWSergey


Цитата:
Кто-нибудь знает как избавиться от таких скачков.
Нужно очень.

у грида есть функции типа DisableControl и EnableControl, может чуть нетак называется
Которые отключают и включают видимость перемещения по гриду.

Попробуй!


Автор: RWSergey
Дата сообщения: 06.08.2003 02:52
MaximSG
Пробовал непроходит. После EnableControl всё равно происходит тот-же скачок.

ironwit
Уточняю

Существуют две таблицы:
Например (показываю только значимые поля)

Таблица 1 (Tab1)

kod number pk
name varchar2

В таблице хранится полный список объектов.

Таблица 2 (Tab2)

kod_t number pk

В таблице хранися выбранные данные.

Выборка:

SELECT ROWID, KOD, name, 0 ab
FROM tab1 d
where kod not in (select kod_t from tab2)
Union all
SELECT ROWID, KOD, name, 1 ab
FROM tab1 d
where kod in (select kod_t from tab2)
order by kod

Dataset связывается с гридом 3 поле (ab) представлено в виде CHECKED.
При щелчке мыши если ab=0 то происходит вставка строки в tab2 если ab=1 то удаление из неё.

Типа вот так.
Автор: ironwit
Дата сообщения: 06.08.2003 08:02
а если отключить грид от запроса, спозиционировать его и включить? По идее скачка быть не должно. Хотя конечно будет мигание.

Или, извратный способ. Данные хранить во временной таблице, после изменения делать update в основной таблице и ручками править временную. Тогда скачков точно не будет.
Автор: RWSergey
Дата сообщения: 07.08.2003 03:11
ironwit

Да спозициировать запрос без проблем, но при "включении" grid текущюю запись делает первой в списке.
Как запомнить положение этой записи в самом grid-e до refresh, и вернуть это положение после refresh ???????????????????????????????????????????????????????????????????????????????????????????????

Как узнать какая по счёту сверху в grid-e была текущая запись????????????????????????
Автор: ironwit
Дата сообщения: 07.08.2003 12:50

Цитата:
Как узнать какая по счёту сверху в grid-e была текущая запись


Подожди, тебе нужно чтобы указатель стал на ту запись которая была до обновления или чтобы он стал и на запись и на тоже место - которое было до обновления?
Автор: BigBoBo1
Дата сообщения: 07.08.2003 13:26
Я по этому поводу пользуюсь BookMark. Да вроде ничего так работает.
Автор: RWSergey
Дата сообщения: 08.08.2003 05:11
ironwit

Цитата:
Подожди, тебе нужно чтобы указатель стал на ту запись которая была до обновления

Да без проблем.

Мне нужно чтобы визуально Grid неизменился (чтобы под указателем мыши осталась таже запись что и была до обновления).



BigBoBo1
По моему BookMark можно применить к DataSet с которым связан Grid, а не к ниму самому.

Автор: ironwit
Дата сообщения: 08.08.2003 12:08
тогда тебе только заводить временную базу для данных и ее вручную синхронизировать с запросами, не допуская ее открытия закрытия. В Ehlib я это делаю так. Пример из процедурки - там в зависимости от введенной суммы, автоматом ставится НДС

procedure TForm12.DBGridEh1Columns7UpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
begin
if (form12<>nil)and(dbgrideh1.fieldcount>10) then
begin
if (length(text)>0) then
begin
if value>dbgrideh1.Columns[7].Field.value then value:=dbgrideh1.Columns[7].Field.value;
dbgrideh1.Columns[10].Field.Value:=roundto(value/100*form1.nds,-2);
end else
begin
value:=0;
text:='0';
if value>dbgrideh1.Columns[7].Field.value then value:=dbgrideh1.Columns[7].Field.value;
dbgrideh1.Columns[10].Field.Value:=roundto(value/100*form1.nds,-2);
end;
end;
end;


Ничего и нигде не скачет и все нормально отображается. Пробуй.

Страницы: 1

Предыдущая тема: алгоритм перестановки чисел без повторов


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.