Форум: "Базы";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
ВнизПодсчет суммы в выделенных строках 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c