![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подсчет суммы в выделенных строках 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]
> в любом случае приводит к изменению отображаемых строк
Моргает что-ли?