Блог


Последние записи


Теги

Информация

Delphi, DevExpress, примеры, решения

Фильтр по тегу: цикл


TcxTreeList - цикл по выделенным узлам

Как пройтись циклом по выделенным узлам TcxDBTreeList?


var
  I, d: Integer;
begin
  for I := 0 to pred(dbTree.SelectionCount) do
    d := TcxDBTreeListNode(dbTree.Selections[i]).KeyValue;


procedure TForm1.Button1Click(Sender: TObject);
var
  ANode: TcxTreeListNode;
begin
  cxTreeList1.BeginUpdate;
  ANode := cxTreeList1.Root.getFirstChild;
  while ANode <> nil do
  begin
    if ANode.Values[cxTreeList1Column1.ItemIndex] = 'Value 2' then
      ANode.Values[cxTreeList1Column2.ItemIndex] := 'Value 5';

    ANode := ANode.GetNext;
  end;
  cxTreeList1.EndUpdate;
end;
добавлено: 07 май 15 просмотры: 1697, комментарии: 1



Пройтись в цикле по видимым записям cxGrid с учетом фильтрации

Если cxGrid отфильтрован, то всё равно цикл, использующий DataController, будет видеть все записи, даже отфильтрованные.
А как пройтись по всем видимым записям с учетом фильтрации, не зависимо от того, что там выделено?

Вот примерно так:

var
i: integer;
bagin

    with <TcxGridTableView>.DataController do
      begin
        BeginUpdate;
        for I := 0 to FilteredRecordCount - 1 do
          ShowMessage(VarToStr(Values[FilteredRecordIndex[i], column1.Index]));




Советую ещё в справке прочесть про ForEachRow()
добавлено: 16 июл 12 просмотры: 3401, комментарии: 0



Пройтись в цикле по выделенным записям с учетом группировки в cxGrid

Даже если TcxGridDBTableView сгруппирован, то процедура будет пропускать строки групп и будет обрабатывать только выделенные записи

procedure ProcessSelectedRecords(grid: TcxGridDBTableView; ColumnIndex: integer);
Var
 i: integer;
 ARowIndex: Integer;
 ARowInfo:  TcxRowInfo;
begin
  with grid.dataController do
  begin
        beginupdate;
        Screen.Cursor := crHourGlass;
        try
          for I := 0 to GetSelectedCount - 1 do
            begin
              ARowIndex := GetSelectedRowIndex(I);
              ARowInfo  := GetRowInfo(ARowIndex);
              if ARowInfo.Level < Groups.GroupingItemCount then
                Continue
              else
                begin
                  ShowMessage(VarToStr(Values[ARowInfo.RecordIndex, ColumnIndex]));
                  ShowMessage(VarToStr(Values[ARowInfo.RecordIndex,  grid.GetColumnByFieldName('имя_нужной_колонки').Index]));
                end;//else
            end;//for
        finally
          endupdate;
          Screen.Cursor := crDefault;
        end;//try
  end;//with
end;


Ещё можно использовать ForEachRow(), см. справку

И здесь ещё есть информация: Как получить значения записей выделенных строк в cxGrid
добавлено: 16 июл 12 просмотры: 2985, комментарии: 0