Текущий архив: 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