![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Колонки в DBGrid [D7, XP]
D@Nger © (2007-01-31 08:04:00)Здравствуйте! У колонок в DBGrid есть порядковые номера - index и id.
Если пользователь меняет местоположение колонок то меняется его индекс, а id остается прежним. Как можно обратиться к определенной колонке по его id, чтобы однозначно знать, что это именно та колонка, а не перемещенная ? Спасибо.
d@nger (2007-01-31 14:22:00) [1]Ой извените....я нашел ошибку.....т.к. я использовал не DBGrid, а DBGridEh, то соответственно писать нужно было не TColumn, а TColumnEh....и все заработало.....я поражаюсь такой маленький код и все работает....а я по началу такое нагородил.....массивы еще приплел....вобщем спасибо тем кто мне пытался помочь....особенно товарищу "ЮЮ". Здоровья тебе и успехов! Спасибо!
d@nger (2007-01-31 14:16:00) [2]все разобрался....:), вобщем сначала делаю ассоциацию элементов из чеклист бокса с колонками в дбгриде. Открываю форму с чеклистбоксом и в событии 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 13:44:00) [3]
> как количество 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 13:11:00) [4]правда я использую не оргинальный DBGrid, а сторонний компонент DBGridEh из библиотеки EhLib, но это я думаю большой роли не должно играть.
d@nger (2007-01-31 13:09:00) [5]
> не мешало бы показать в каких пределах i изменяешь, как
> количество Items задаешь, в каком обработчике ЭТО пишешь
for i:=0 to 11 do
checklistbox1.Items.Objects[i]:=DBGrid1.Columns[i];
ЮЮ (2007-01-31 12:58:00) [6]
> когда я пишу вот так
не мешало бы показать в каких пределах i изменяешь, как количество Items задаешь, в каком обработчике ЭТО пишешь.
d@nger (2007-01-31 12:48:00) [7]когда я пишу вот так
checklistbox1.Items.Objects[i]:=DBGrid1.Columns[i];
компилируется нормально, но при запуске выходит ошибка ...raise exception... в чем ошибка?
ЮЮ (2007-01-31 10:41:00) [8]TColumn(checklistbox1.Items.Objects[<индекс>]).Visible := checklistbox1.Checked[<индекс>];
d@nger (2007-01-31 10:32:00) [9]
> Items.Objects[i] := Column, т.е. привязка к объекту, а не
> к индексу и id
так связывать?
for i:=0 to 11 do
checklistbox1.Items.Objects[i]:=DBGrid1.Columns[i];
а потом то как обрабатывать?
clickmaker (2007-01-31 10:09:00) [10]
> [6] d@nger © (31.01.07 10:02)
а Columns.SaveToFile / LoadFromFile не подойдет?
в качестве чекбоксов удобно использовать CheckListBox
Items.Objects[i] := Column, т.е. привязка к объекту, а не к индексу и id
Впрочем, то же самое можно и в CheckBox.Tag
ЮЮ (2007-01-31 10:08:00) [11]Так пользователь скрывает столбец не потому, что он 2-ой в гриде, а потому, что оно отображает информацию из поля А. Вот и сохраняй это А - (TColumn.FieldName)
d@nger (2007-01-31 10:02:00) [12]я щас объясню для чего мне это нужно....я хочу дать возможность пользователю скрывать и отображать столбцы в DBGride. как это можно реализовать по изящнее. сейчас у меня отдельная форма с чекбоксами отвечающих за конкретную колонку. если чекбокс отмечен то отображать если нет то не отображать. Храню параметры столбцов в ини файле. кто то может делал что то подобное поделитесь советом....
Elen (2007-01-31 09:56:00) [13]
> а в цикле обращаться по имени поля не очень удобно...
Возвращай в цикле по номеруполя
Separator (2007-01-31 09:33:00) [14]Написанно ведь:
> юююнужно обращаться к полю таблицы.
е лезь ты в DBGrid, обращайся к Table или Query, в общем к жлементу, который вытаскивает данные из сервера, в нем ни каких изменений не происходит, если ты меняешь порядок отображения в DBGrid. А вот в tabel уже можно обращаться к столбцам по их номеру в цикле или как там тебе еще захочется
Sergey13 (2007-01-31 09:33:00) [15]> [2] d@nger © (31.01.07 09:28)
В цикле можно и по полям пройтись.
Завязывать обработку данныхна положение колонки в гриде ( в котором данных нет) по меньшей мере странно.
d@nger (2007-01-31 09:28:00) [16]а нельзя при помощи id? т.к. я хочу обрабатывать это в цикле, а в цикле обращаться по имени поля не очень удобно...
Elen (2007-01-31 08:48:00) [17]
> чтобы однозначно знать, что это именно та колонка, а не
> перемещенная
юююнужно обращаться к полю таблицы.