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

Вниз

dxdbgrid - выделенный столбец   Найти похожие ветки 

 
battar   (2002-09-20 22:45) [0]

как определить какой выделен столбец в данный момент.
На старом добром дбгриде это было так:

mytext:=DBGird1.SelectedField.AsString.

ЗЫЖ Доку на английском не могу читать.


 
battar   (2002-09-24 15:25) [1]

Quantum Grid

че ни как?


 
Black Cat ©   (2002-09-24 15:34) [2]

dxDBGrid1.FocusedField.AsString


 
battar   (2002-09-25 21:13) [3]

Большое Спасибо...

А теперь проблема - как подсчитать сумму по выделенным документам?

Я понимаю что можно как то извратиться и махом подсчитать, но у меня что-то не получается, а вот как я в гриде считаю:


procedure TfrmCheif.mnCountClick(Sender: TObject);
var
i,all:Integer;
summ:Real;
bm:TBookMark;
begin
WITH (DM.T_DOC) DO
BEGIN
all:=0;
Summ:=0;
DisableControls;
bm:=GetBookMark;
try
for i:=0 to DBGrid1.SelectedRows.Count-1 do
Begin
BookMark := DBGrid1.SelectedRows[i];
Inc(all);
Summ:=Summ+DM.T_DOC.FindField("SUM").AsFloat;
End;
finally
GotoBookMark(bm);
FreeBookMark(bm);
EnableControls;
end;
ShowEvent("Документов выделенных..."+#13+#13+
"Всего - "+IntToStr(all)+#13+
"На сумму - "+Format("%m",[Summ])+#13+#13+
MoneyToString(Summ,true,false),
1);
END;
end;


Интересует анолог выделенной функции...


 
battar   (2002-10-01 20:31) [4]

савсем никак?


 
vuk ©   (2002-10-01 21:22) [5]

см. SelectedCount, SelectedNodes


 
Awex ©   (2002-10-02 10:02) [6]

2battar
1. Дело в синхронизация текущей записи в наборе данных и в отображаемой гриде в режиме LoadAllRecord контролируются самой гридой. И нет гарантии что запись в фокусе гриде не сответствует
текущей записи в наборе данных. Для принудительной синхронизации
существует оптиция OptionsDB -> флаг edgoSyncSelection.

2. Для прохода по всем выделенным записям можно использовать следующую конструкцию:

with dxDBGrid1
for i := 0 to SelectedCount - 1 do
begin
if SelectedNodes[i] <> nil then
begin
SelectedNodes[i].Focused := True;
<-Получаем данные из набора данных ->
end;
end


 
vuk ©   (2002-10-02 10:47) [7]

Во-первых, SelectedNodes будет что-то содержать только в режиме LoadAllRecords, в обычном же режиме используется свойство SelectedRows, содержащее набор закладок для DataSet(bookmark).

Во-вторых, если все-таки используется режим LoadAllRecords, то синхронизировать положение в гриде с позицией в DataSet вовсе не обязательно. Дело в том, что все данные уже гридом подгружены и можно работать с ними не обращаясь к набору данных и не дергая его лишний раз. Достаточно просто выбирать нужные данные из ноды. При этом нужно помнить, что может быть включен режим группировки и нужно пропускать ноды групп.


var
i, n : integer;
Node : TdxTreeListNode;
s : string;
value : integer;
begin
n := GridColumn.Index; //индекс колонки для получения данных
value := 0;
for i := 0 to grid.SelectedCount - 1 do
begin
Node := grid.SelectedNodes[i];
if not Node.HasChildren then //пропускаем группирующие ноды
Value := Value + Node.Values[n]; //возможно придется привести variant к нужному типу данных
end;



 
battar   (2002-10-03 21:11) [8]

спасибо за помощь, теперь разбираюсь в индексах колонки.

В DataSet я обращался как
DM.T_DOC.FindField("SUM").AsFloat
и суммировал по нему, в вашем же ответе ( vuk ©)
используется номер, но если пользователь перенесет столбец,
то суммируется по другому...
:(


 
battar   (2002-10-03 21:29) [9]

о решил как:

for i:=0 to dxgrdDoc.ColumnCount-1 do
if upperCase(dxgrid1.Columns[i].FieldName)="SUMM" then nCol:=i;


но все-таки мож есть стандартное решение...


 
battar   (2002-10-03 21:33) [10]

кстати насчет синхронизации, у меня почему то какой-странный глюк - по Ф2 на ячейки - пока не нажал одно значение показывал, как нажал - другое.
edgoSyncSelection включено...
Это глюк или опция?


 
vuk ©   (2002-10-03 22:34) [11]

to battar:
>используется номер, но если пользователь перенесет столбец,
>то суммируется по другому...
В моем коде так не будет, я Вас уверяю. Я только что проверил это еще раз и все работает правильно.

Чтобы разобраться что к чему нужно знать как QuantumGrid хранит информацию. Там все данные содержатся в нодах(TdxTreeListNode), причем на каждую строчку (в том числе и заголовки групп) в гриде имеется одна нода. Данные колонок хранятся внутри ноды и доступны через свойство-массив Values. Индексом в этом массиве является индекс колонки. Причем, этот индекс при перемещении колонки будет меняться, поэтому перед вычислениями нужно взять правильный индекс. Что у меня и сделано.

>но все-таки мож есть стандартное решение...
Стандартное решение я уже Вам написал.


 
battar   (2002-10-04 17:38) [12]


> n := GridColumn.Index; //индекс колонки для получения данных

хех... к примеру в таблице у меня это поле SUMM, то как найти его индекс?

или я что-то не умею читать :)


 
vuk ©   (2002-10-04 18:03) [13]

>хех... к примеру в таблице у меня это поле SUMM, то как найти
>его индекс?
Вы столбец, который это поле отображает знаете? Если нет, то у грида есть метод FindColumnByFieldName.



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

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

Наверх




Память: 0.5 MB
Время: 0.016 c
14-92719
SPeller
2002-10-07 18:33
2002.10.28
Кто смотрел передачу


1-92488
Стивенс
2002-10-18 09:52
2002.10.28
Delphi 7 + int64


1-92413
Filat
2002-10-07 19:22
2002.10.28
ВАЖНО!! Добавление новых функций в прогу при помощи DLL?


1-92595
Slexx
2002-10-17 08:20
2002.10.28
интерфейс


1-92603
EugeneK
2002-10-17 11:34
2002.10.28
Поиск файла