Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Подсчет суммы в выделенных строках DBGrid   Найти похожие ветки 

 
TTCustomDelphiMaster ©   (2003-01-08 22:07) [0]

Я решаю такую задачу нужно посчитать сумму по некоромым полям выделенным в 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 в любом случае приводит к изменению отображаемых строк или столбцов.
Кто сталкивался с такой задачей и как решал ее? И как можете оценить мое решение приемлимое оно или полная лажа?


 
gek ©   (2003-01-09 07:52) [1]


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

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


 
Johnmen ©   (2003-01-09 09:20) [2]

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


 
REA ©   (2003-01-09 11:30) [3]

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


 
Max Zyuzin ©   (2003-01-09 11:35) [4]

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


 
Johnmen ©   (2003-01-09 11:58) [5]

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

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


 
MsGuns ©   (2003-01-09 12:07) [6]

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

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

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

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

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

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


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

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 15:36) [8]

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

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



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

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


 
ikis ©   (2003-01-09 16:07) [10]

2 REA©

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

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


 
TTCustomDelphiMaster ©   (2003-01-09 18:58) [11]

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



 
ЮЮ ©   (2003-01-10 03:43) [12]

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



Страницы: 1 вся ветка

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
14-87022
grab3
2003-01-10 17:22
2003.01.27
Не может открыть PWLку.


1-86742
Думкин
2003-01-17 09:05
2003.01.27
Прорисовка


4-87189
Stainer
2002-12-09 16:41
2003.01.27
темы рабочего стола


14-87132
Jorjick
2003-01-10 05:46
2003.01.27
как убить windows


3-86713
anton2v
2003-01-09 16:27
2003.01.27
переход в TTable путем задания Table.RecNo