Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-86835
Hooch
2003-01-19 11:31
2003.01.27
Восстановление MS SQL БД из лога


3-86642
Grab3
2003-01-05 10:00
2003.01.27
Из базы в текстовое поле


3-86649
vcv
2003-01-06 17:55
2003.01.27
Не получается запрос по двум таблицам


4-87223
kirill8
2002-12-13 16:45
2003.01.27
закрыть окно


14-87110
DDDeN
2003-01-03 18:34
2003.01.27
Раскрутка !!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский