Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизКолонки в DBGrid Найти похожие ветки
← →
D@Nger © (2007-01-31 08:04) [0]Здравствуйте! У колонок в DBGrid есть порядковые номера - index и id.
Если пользователь меняет местоположение колонок то меняется его индекс, а id остается прежним. Как можно обратиться к определенной колонке по его id, чтобы однозначно знать, что это именно та колонка, а не перемещенная ? Спасибо.
← →
Elen © (2007-01-31 08:48) [1]
> чтобы однозначно знать, что это именно та колонка, а не
> перемещенная
юююнужно обращаться к полю таблицы.
← →
d@nger © (2007-01-31 09:28) [2]а нельзя при помощи id? т.к. я хочу обрабатывать это в цикле, а в цикле обращаться по имени поля не очень удобно...
← →
Sergey13 © (2007-01-31 09:33) [3]> [2] d@nger © (31.01.07 09:28)
В цикле можно и по полям пройтись.
Завязывать обработку данных на положение колонки в гриде (в котором данных нет) по меньшей мере странно.
← →
Separator © (2007-01-31 09:33) [4]Написанно ведь:
> юююнужно обращаться к полю таблицы.
е лезь ты в DBGrid, обращайся к Table или Query, в общем к жлементу, который вытаскивает данные из сервера, в нем ни каких изменений не происходит, если ты меняешь порядок отображения в DBGrid. А вот в tabel уже можно обращаться к столбцам по их номеру в цикле или как там тебе еще захочется
← →
Elen © (2007-01-31 09:56) [5]
> а в цикле обращаться по имени поля не очень удобно...
Возвращай в цикле по номеру поля
← →
d@nger © (2007-01-31 10:02) [6]я щас объясню для чего мне это нужно....я хочу дать возможность пользователю скрывать и отображать столбцы в DBGride. как это можно реализовать по изящнее. сейчас у меня отдельная форма с чекбоксами отвечающих за конкретную колонку. если чекбокс отмечен то отображать если нет то не отображать. Храню параметры столбцов в ини файле. кто то может делал что то подобное поделитесь советом....
← →
ЮЮ © (2007-01-31 10:08) [7]Так пользователь скрывает столбец не потому, что он 2-ой в гриде, а потому, что оно отображает информацию из поля А. Вот и сохраняй это А - (TColumn.FieldName)
← →
clickmaker © (2007-01-31 10:09) [8]
> [6] d@nger © (31.01.07 10:02)
а Columns.SaveToFile / LoadFromFile не подойдет?
в качестве чекбоксов удобно использовать CheckListBox
Items.Objects[i] := Column, т.е. привязка к объекту, а не к индексу и id
Впрочем, то же самое можно и в CheckBox.Tag
← →
d@nger © (2007-01-31 10:32) [9]
> Items.Objects[i] := Column, т.е. привязка к объекту, а не
> к индексу и id
так связывать?
for i:=0 to 11 do
checklistbox1.Items.Objects[i]:=DBGrid1.Columns[i];
а потом то как обрабатывать?
← →
ЮЮ © (2007-01-31 10:41) [10]TColumn(checklistbox1.Items.Objects[<индекс>]).Visible := checklistbox1.Checked[<индекс>];
← →
d@nger © (2007-01-31 12:48) [11]когда я пишу вот так
checklistbox1.Items.Objects[i]:=DBGrid1.Columns[i];
компилируется нормально, но при запуске выходит ошибка ...raise exception... в чем ошибка?
← →
ЮЮ © (2007-01-31 12:58) [12]
> когда я пишу вот так
не мешало бы показать в каких пределах i изменяешь, как количество Items задаешь, в каком обработчике ЭТО пишешь.
← →
d@nger © (2007-01-31 13:09) [13]
> не мешало бы показать в каких пределах i изменяешь, как
> количество Items задаешь, в каком обработчике ЭТО пишешь
for i:=0 to 11 do
checklistbox1.Items.Objects[i]:=DBGrid1.Columns[i];
← →
d@nger © (2007-01-31 13:11) [14]правда я использую не оргинальный DBGrid, а сторонний компонент DBGridEh из библиотеки EhLib, но это я думаю большой роли не должно играть.
← →
d@nger © (2007-01-31 13:44) [15]
> как количество Items задаешь
а как его задать?
> в каком обработчике ЭТО пишешь.
procedure TFpeople.FormCreate(Sender: TObject);
var i:byte;
begin
for i:=0 to 11 do
fpeople_columns.checklistbox1.Items.Objects[i]:=DBGridEh1.Columns[i];
end;
← →
d@nger © (2007-01-31 14:16) [16]все разобрался....:), вобщем сначала делаю ассоциацию элементов из чеклист бокса с колонками в дбгриде. Открываю форму с чеклистбоксом и в событии onClose этой формы делаю следующее:
procedure TFpeople_columns.FormClose(Sender: TObject; var Action: TCloseAction);
var i:byte;
begin
for i:=0 to 11 do
Tcolumn(checklistbox1.Items.Objects[i]).visible:=checklistbox1.checked[i];
end;
т.е. пытаюсь скрыть или отобразить колонки в DBGride, НО на этом месте программа вылетает с ошибкой raise exception и упоминается еще "kernel32.dll". Что не так? Ничего не пойму. Помогите!
← →
d@nger © (2007-01-31 14:22) [17]Ой извените....я нашел ошибку.....т.к. я использовал не DBGrid, а DBGridEh, то соответственно писать нужно было не TColumn, а TColumnEh....и все заработало.....я поражаюсь такой маленький код и все работает....а я по началу такое нагородил.....массивы еще приплел....вобщем спасибо тем кто мне пытался помочь....особенно товарищу "ЮЮ". Здоровья тебе и успехов! Спасибо!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c