Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Колонки в 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]


> чтобы однозначно знать, что это именно та колонка, а не
> перемещенная

юююнужно обращаться к полю таблицы.


Наверх

Титульная страница Поиск, карта сайта Написать письмо