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