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

Вниз

Колонки в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.046 c
2-1170173772
alfavit
2007-01-30 19:16
2007.02.18
Мистика какая то, заполняю одну запись а данные пишутся


10-1129036231
KIA
2005-10-11 17:10
2007.02.18
вставка больщой таблицы в WORD


15-1169054926
vasIzmax
2007-01-17 20:28
2007.02.18
Пару вопросов...


15-1170042777
Slider007
2007-01-29 06:52
2007.02.18
С днем рождения ! 29 января


1-1167227514
AngelOfDarkness_
2006-12-27 16:51
2007.02.18
Excel