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

Вниз

Колонки в RxDBGrid   Найти похожие ветки 

 
Developerr ©   (2004-05-25 15:08) [0]

Доброе время суток. Возникла следующая проблема: У меня есть форма на которой есть RxDBGrid и форма с названием колонок RxDBGrid, на которой я отмечаю птичкой в RxCheckListBox какие колонки отображать, а какие нет, а также переставляю сестами колонки и т.д. Сейчас я решил сделать в в своей программе возможность выбирать язык. И тут возникла следующая проблема. Раньше я просто сверял заголовки колонок RxDBGrid и строк RxCheckListBox и все работало. Делал я так:

procedure TColumnForm.FormStorage1RestorePlacement(Sender: TObject);
var
 i,j:integer;
 find:boolean;
begin
 QuitWS:=true;
 for i:=0 to GridForm.RxDBGrid1.Columns.Count-1 do
   begin
     if GridForm.RxDBGrid1.Columns[i].Visible<>false then
       begin
        // найдем соответствующую строку в RxCheckListBox1
        find:=false; j:=0;
        while not find and (j<RxCheckListBox1.Items.Count) do
          if RxCheckListBox1.Items[j]=GridForm.RxDBGrid1.Columns.Items[i].Title.Caption then
             find:=true
          else inc(j);
          if find then
             // строка найдена
             RxCheckListBox1.Checked[j]:=true;
       end;
   end;
 RxCheckListBox1.Selected[0]:=true;
 btUp.Enabled:=False;
end;


Но возникла проблема, когда я меняю язык, название колонок тоже меняется. Я решил сделать по другому.
Вместо кода приведенного выше я пишу следующее:

RxCheckListBox1.Items.Clear
for i:=0 to GridForm.RxDBGrid1.Columns.Count-1 do
RxCheckListBox1.Items.Add(GridForm.RxDBGrid1.Columns.Items[i].Title.Caption);


Все хорошо, только те колонки, которые Visible всегда отображаюся в начале списка, а не в том торядке в котором я их выставлял.
А устанавливаю колонки я так:

procedure TColumnForm.btSetClick(Sender: TObject);
var
 i,j,col_in_order:integer;
 find:boolean;
begin
 col_in_order:=0;
 for i:=0 to RxCheckListBox1.Items.Count-1 do
   begin
     if RxCheckListBox1.Checked[i] then
       begin
        // найдем соответствующую колонку в гриде
        find:=false; j:=0;
        while not find and (j<GridForm.RxDBGrid1.Columns.Count) do
          if GridForm.RxDBGrid1.Columns.Items[j].Title.Caption=RxCheckListBox1.Items[i] then
             find:=true
          else inc(j);
          if find then
            begin
              // столбец найден
              GridForm.RxDBGrid1.Columns.Items[j].Visible:=true;
              GridForm.RxDBGrid1.Columns.Items[j].Index:=col_in_order;
              inc(col_in_order);
            end;
       end;
   end;
 for j:=col_in_order to GridForm.RxDBGrid1.Columns.Count-1 do
   // скроем неотмеченные столбцы
   GridForm.RxDBGrid1.Columns.Items[j].Visible:=false;
 QuitWS:=false;
 Close;
end;


Как сделать, что бы названия колонок оставались на своих местах вв ColumnForm, а не так, чтобы сначала, те которые Visible (отмеченные птичками), а потом все остальные.
Спасибо.


 
Reindeer Moss Eater ©   (2004-05-25 15:39) [1]

Это побочный эффект твоего алгоритма перебора колонок для присваивания им индекса.

Нужно перебирать индексы колонок, искать колонку которая должна иметь очередной индекс и присваивать ей индекс.
Ты же просто перебираешь колонки по именам и присваиваешь им индексы.


 
Developerr ©   (2004-05-25 17:27) [2]


> Нужно перебирать индексы колонок, искать колонку которая
> должна иметь очередной индекс и присваивать ей индекс.

Спасибо, большое. А можно пример?



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

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

Наверх




Память: 0.47 MB
Время: 0.037 c
11-1074881761
TEmp_Name
2004-01-23 21:16
2004.06.06
Updater 3.1


14-1084638465
Art_Z
2004-05-15 20:27
2004.06.06
Чем заняться?


14-1085219521
Piter
2004-05-22 13:52
2004.06.06
Вы слишком долго жили в Америке, если...


1-1085548224
Vilux
2004-05-26 09:10
2004.06.06
RichEdit


3-1084442440
Вованчик
2004-05-13 14:00
2004.06.06
QuickReport