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

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

Подсчет суммы в выделенных строках DBGrid [D5, Paradox]


TTCustomDelphiMaster ©   (2003-01-08 22:07:00) 

Я решаю такую задачу нужно посчитать сумму по некоромым полям выделенным в DBGrideh1.
Для этого создаю запрос такой же который отображен в DBGrideh1 и перемещаюсь по нему сравнивая текущую позицию с закладками(выделенными строками) созданными в DBGrideh1.
Тестовый пример ниже

procedure TCargosForm.Button1Click(Sender: TObject);
var
i: integer;
begin
query1.First;
while not query1.Eof do
begin
if DBGrideh1.SelectedRows.Find(query1.Bookmark, i) then
ShowMessage(query1.FieldByName(_fCargoNumber).AsString);
Query1.Next;
end;
end;


Способ получился довольно извращенный, но других методов решения этой задачи я не нашел.
Перемещение по закладкам в DataSet связанном с DBGrideh1 в любом случае приводит к изменению отображаемых строк или столбцов.
Кто сталкивался с такой задачей и как решал ее? И как можете оценить мое решение приемлимое оно или полная лажа?


ЮЮ   (2003-01-10 03:43:00) [1]

"Подправить" DBGrideh (DoSelection и пр.), добавить обработчик
DBGrideh.onSelect(Select: boolean, DataSet: TDataSet) и наслаждаться жизнью :-)


TTCustomDelphiMaster   (2003-01-09 18:58:00) [2]

Оч просто заносите в TList ID данной таблицы, а потом по ним делайте запрос. Только интерфейс для выделения строк в Gride придется делать сомому.


ikis   (2003-01-09 16:07:00) [3]

2 REA©

> ...засекать... отмеченные записи и формировать запрос...

Нельзя ли поподробнее: есть список (TList, TBookmarkList - неважно) идентификаторов строк, как теперь сформировать на его основе запрос?


Mike Kouzmine   (2003-01-09 15:39:00) [4]

Верно. Согласен


MsGuns   (2003-01-09 15:36:00) [5]

>Mike Kouzmine (09.01.03 14:51)
>Johnmen © прав

Не совсем ! Если нд не детал и нет активных фильтров, то да. Если же есть, то DisableControl очень и очень удивит ;))


Mike Kouzmine   (2003-01-09 14:51:00) [6]

Johnmen © прав
if dbg.selectedrows.count > 0 then
begin
try
t.disablecontrols
M := t.GetBookmark;
for I := 0 to dbg.slectedrows.count - 1 do
begin
t.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
......
end;
finally
if t.bookmarkvalid(M) then
begin
t.gotobookmark(M);
t.freebookmark(m);
t.enablecontrols;
end;
end


MsGuns   (2003-01-09 12:07:00) [7]

>Johnmen © (09.01.03 09:20)
>1. DisableControls+EnableControls

Предпочтительнее отключать грид от источника, а потом опять подключать:
grid1.DataSource := nil;
побегать по НД
grid1.DataSource := DataSource1;

>2. Пройти не по всем записям, а только по заложенным !

Без комментариев

А вообще-то проще использовать доп.поле для маркировки. Для определения суммы достаточно просто дать запрос. Кстати, если поле положить в датасет невозможно, хорошо использовать TClientDataSet именно для этих целей (в смысле просмотра и пометок юзером с последующим запросом на сумму)

--------------------------------------------------------------------------------


Johnmen   (2003-01-09 11:58:00) [8]

>REA © (09.01.03 11:30)
>Max Zyuzin © (09.01.03 11:35)

Зачем же делать еще один список, ведь он уже есть TBookmarkList ?!


Max Zyuzin   (2003-01-09 11:35:00) [9]

>TTCustomDelphiMaster © (08.01.03 22:07)
Согласен с REA © (09.01.03 11:30) Создать какой нить списочек... как только отмечаешь запись - добавляй в него (список) ключ поля... Ну а по надобности сроишь запрос исходя из ентого списка...


REA   (2003-01-09 11:30:00) [10]

Можно засекать как то в процессе закладывания отмеченные записи и формировать запрос с агрегатными полями исходя из этой информации. Можно использовать ClientDataset и там обращаться можно к любой записи.


Johnmen   (2003-01-09 09:20:00) [11]

1. DisableControls+EnableControls
2. Пройти не по всем записям, а только по заложенным !


gek   (2003-01-09 07:52:00) [12]


> в любом случае приводит к изменению отображаемых строк

Моргает что-ли?


Наверх

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