Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dxdbgrid - выделенный столбец [D3, D4, D5, D6]


battar ©   (2002-09-20 22:45:00) 

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

mytext:=DBGird1.SelectedField.AsString.

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


vuk   (2002-10-04 18:03:00) [1]

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


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


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

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

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


vuk   (2002-10-03 22:34:00) [3]

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

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

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


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

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


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

о решил как:

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


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


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

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

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


vuk   (2002-10-02 10:47:00) [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;


Awex   (2002-10-02 10:02:00) [8]

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-01 21:22:00) [9]

см. SelectedCount, SelectedNodes


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

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


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

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

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

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


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;


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


Black Cat   (2002-09-24 15:34:00) [12]

dxDBGrid1.FocusedField.AsString


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

Quantum Grid

че ни как?


Наверх

Титульная страница Поиск, карта сайта Написать письмо