Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
3 / 3 / 0
Регистрация: 07.11.2013
Сообщений: 32

CheckBox и DBGrid (вывод и скрытие столбцов)?

26.01.2014, 22:49. Показов 5449. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер
Хочу сделать такую вещь.
Есть база данных. Отображаю содержимое её на экране через DBGrid. Мне нада чтобы был выбор какие столбцы вывести на экран а какие нет (думаю если посмотрите на рисунок сразу все понятно станет рис1.gif).

Я делаю так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  DMRep.DSetRepDd.Close;
  DMRep.DSetRepDd.SelectSQL.Clear;
  DMRep.DSetRepDd.SelectSQL.Text := S;
  DMRep.DSetRepDd.Open;
 
  if (CB1.Checked) then
    begin
      RepDdZak.DBGRepDdZak.Columns.Add;
      RepDdZak.DBGRepDdZak.Columns[0].FieldName := 'NUM_CONTR';
      RepDdZak.DBGRepDdZak.Columns[0].Title.Caption := '№ договора';
      RepDdZak.DBGRepDdZak.Columns[0].Width := 150;
    end;
  if (CB2.Checked) then
    begin
      RepDdZak.DBGRepDdZak.Columns.Add;
      RepDdZak.DBGRepDdZak.Columns[1].FieldName := 'NUM_INTERN';
      RepDdZak.DBGRepDdZak.Columns[1].Title.Caption := 'Доп. № договора';
      RepDdZak.DBGRepDdZak.Columns[1].Width := 110;
    end;
... ну и т.д. по всем ChecBox-ам

Delphi
1
2
  RepDdZak.DBGRepDdZak.DataSource := DMRep.DSRepDd;
  RepDdZak.ShowModal;
При закрытии формы RepDdZak (на которой и выводится сетка DBGRepDdZak) пишу следующий код, для того, чтобы при закрытии формы все колонки которые были созданы удалялись:

Delphi
1
2
3
4
5
6
7
procedure TRepDdZak.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: Integer;
begin
  for i := 0 to RepDdZak.DBGRepDdZak.Columns.Count-1 do
  RepDdZak.DBGRepDdZak.Columns.Delete(i);
end;
Но, почему-то при выделении CB2...CB12 (CheckBox-ы) выдается ошибка (см. Error.gif)

Вот никак не могу понять в чем проблема.
Подскажите что тут не верно!
Миниатюры
CheckBox и DBGrid (вывод и скрытие столбцов)?   CheckBox и DBGrid (вывод и скрытие столбцов)?  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.01.2014, 22:49
Ответы с готовыми решениями:

Вывод суммы столбцов в DBGrid
На форме есть DBGrid, хочу посчитать сумму уникальных значений по каждому столбцу, при чем выбор этих уникальных столбцов осуществляется с...

Как можно посчитать разницу столбцов DBGrid и вывести в другой столбец другого DBGrid?
Я знаю как посчитать разницу в одном и том же DBGrid. Но, дело в том, что мне нужно вывести это в другой DBGrid. Я сделала вот так,...

Фиксирование нужных столбцов DBGrid или скрыть относительно позиции гор. скролла DBGrid'a необходимые столбцы
Добрый день! Можно ли в компоненте DBGrid сделать фиксированными определенные столбцы? или же как то вычислять позицию горизонтального...

19
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
26.01.2014, 23:06
Настрой все столбцы как надо, а при помощи ЧекБоксов просто включай/выключай их:
Delphi
1
DBGrid1.Columns[0].Visible := CheckBox1.Checked;
0
3 / 3 / 0
Регистрация: 07.11.2013
Сообщений: 32
26.01.2014, 23:15  [ТС]
Цитата Сообщение от FIL Посмотреть сообщение
Настрой все столбцы как надо, а при помощи ЧекБоксов просто включай/выключай их:
Delphi
1
DBGrid1.Columns[0].Visible := CheckBox1.Checked;
Это вариант. Спасибо.
Но я хочу с помощью одной этой формы и соответственно одного DBGridа выводить данные из разных таблиц.
Т.Е. я програмно подключаю DBGrid к набору данных.
А тот вариант который вы предложили дееспособен только в том случае если я DBGrid подключу к определенному набору данных напрямую через Инспектор объектов. Просто без этого поле FieldName - пустое.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
26.01.2014, 23:34
Тогда через ДатаСет:
Delphi
1
DBGrid1.DataSource.DataSet.Fields[0].Visible := CheckBox1.Checked;
1
3 / 3 / 0
Регистрация: 07.11.2013
Сообщений: 32
27.01.2014, 21:12  [ТС]
Цитата Сообщение от FIL Посмотреть сообщение
Тогда через ДатаСет:
Delphi
1
DBGrid1.DataSource.DataSet.Fields[0].Visible := CheckBox1.Checked;
Огромное спасибо за помощь.)
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
11.03.2015, 11:07
У меня почти в тему вопрос!!!: Хотелось бы вот сделать .Visible := true/false столбца в зависимости от некоторого значения в текущей записи. Т.е. по простецки когда юзер перемещается по гриду столбец должен то появляться, то пропадать...
Так вот проблемка - если делать скролинг мышкой или клавой прямо по гриду, т.е. когда этот грид в фокусе .Visible := true/false не работает. Точнее значение присваивается, но на экране столбец на пропадает/не возникает. Вроде перерисовка не происходит.

А если скролить наигатором, или кнопкой с кодом Датасет.Prior / Датасет.Next, то все нормально, т.е. когда курсор не в гриде .Visible := true/false столбца срабатывает.

Как это побороть бы?
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
19.03.2015, 11:04
что вообще не знает никто???
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
19.03.2015, 11:11
жесть какая - прыгающий грид
скрой, не показывай значение в ячейке
зачем колонки-то фигачить
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
19.03.2015, 11:55
))) Та не жесть и не прыгающий. По задаче так задумано, чтобы лишних столбцов не видеть, для одного вида такой набор ячеек, для другого - другой. В аксе все ж пристойно выглядит (так и зачем что-то новое выдумывать), а вот дельфин брыкается как обычно)

Уже пробовал фокус на другой элемент переводить - не помогает...
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
19.03.2015, 12:13
речь же не про вид шла - там резвись как хочешь
я так понял, что стоим на 10-й строке - 9 колонок
перешли на 11-ю строку колонок стало 8
а на 12-ю - 4?
??
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
19.03.2015, 12:18
Ну как-то так примерно. Я же описал вроде. Типа значение поля = 1 then колонка видна (возьмем пока для одной колонки), значение поля = 2 then колонка не видна.))
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
19.03.2015, 12:53
Проблема-то в чем?
У каждого столбца есть св-во Visible.
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
19.03.2015, 13:05
Цитата Сообщение от FIL Посмотреть сообщение
Проблема-то в чем?
Попробую не матюкаться... Когда двигаюсь по гриду (вниз-вверх) клавой, или мышкой (выбираю строку или колесом гоняю) --> Т.е. Грид в ФОКУСЕ. - от Visible толку нет
0
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
19.03.2015, 13:14
Цитата Сообщение от kavasaka Посмотреть сообщение
Когда двигаюсь по гриду (вниз-вверх) клавой, или мышкой (выбираю строку или колесом гоняю) --> Т.е. Грид в ФОКУСЕ. - от Visible толку нет
Не верю!
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
19.03.2015, 13:32
Ну можно так заставить колонку перерисоваться:
Delphi
1
2
3
4
5
procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
  DBGrid1.Columns[2].Visible := DataSet.RecNo mod 2 = 0;
  DBGrid1.Columns[2].Width := DBGrid1.Columns[2].Width;
end;
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
19.03.2015, 13:38
Цитата Сообщение от northener Посмотреть сообщение
Не верю!
ОК. буду снимать видео на мобилу с экрана. Только шнура нет сегодня юсб. завтра скину)))
А есть такие программки типа видео скрин экрана?

Добавлено через 3 минуты
Delphi
1
[quote="FIL;7361527"]DBGrid1.Columns[2].Width := DBGrid1.Columns[2].Width;[/quote]
Попробую. А Visible разве влияет на Width ?
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
19.03.2015, 13:40
Цитата Сообщение от kavasaka Посмотреть сообщение
А Visible разве влияет на Width ?
Фиг его знает, но задание Width заставляет колонку перерисоваться.
1
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
19.03.2015, 13:42
qip shot
яндекс скриншот
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
19.03.2015, 15:07
Заработало!
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,602
20.03.2015, 14:25
1)
Delphi
1
uses IniFiles
2)
Delphi
1
2
  public
     Ini: TIniFile;
3)
Delphi
1
2
3
4
procedure TfrmMain.FormCreate(Sender: TObject);
begin
   Ini:=TIniFile.Create(ExtractFileDir(Application.ExeName)+'\config.ini');
end;
4)
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TfrmMain.FormShow(Sender: TObject);
var i: integer;
    st: string;
begin
   st:=Ini.ReadString('INTERFACE','SEARCH','');
   for i:=0 to DBGrid1.Columns.Count-1 do
   if st[i+1]='1' then DBGrid1.Columns[i].Visible := true
   else DBGrid1.Columns[i].Visible := false;
 
end;
5) Форма для настройти и на него frmConfig.CheckListBox1
Delphi
1
2
3
4
5
procedure TfrmMain.btnConfigClick(Sender: TObject);
begin
   ADOQuery1.GetFieldNames(frmConfig.CheckListBox1.Items);
   frmConfig.ShowModal;
end;
6) Настрайваем и сохраняем ini файле
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TfrmConfig.btnokClick(Sender: TObject);
var
  i: integer;
  st: string;
begin
 st:='';
 for i:=0 to CheckListBox1.Count - 1 do begin
   if CheckListBox1.Checked[i] then st:=st+'1' else st:=st+'0';
   frmMain.DBGrid1.Columns[i].Visible := CheckListBox1.Checked[i];
 end;
   frmMain.Ini.WriteString('INTERFACE','SEARCH',st);
 
end;
7) При откритое проверяем форму настройки
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TfrmConfig.FormShow(Sender: TObject);
var
 i: integer;
 st: string;
begin
 st:= frmMain.Ini.ReadString('INTERFACE','SEARCH','');
 for i:=0 to CheckListBox1.Count - 1 do
 if st[i+1]='1' then CheckListBox1.Checked[i]:=true
 else CheckListBox1.Checked[i]:= false;
 
end;
8) Ползуйм все работаеть ! Но, не забиваем автор этого исходника! Уважаемый Sciv
Миниатюры
CheckBox и DBGrid (вывод и скрытие столбцов)?   CheckBox и DBGrid (вывод и скрытие столбцов)?   CheckBox и DBGrid (вывод и скрытие столбцов)?  

CheckBox и DBGrid (вывод и скрытие столбцов)?  
Вложения
Тип файла: rar config_Grid.rar (3.09 Мб, 29 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2015, 14:25
Помогаю со студенческими работами здесь

CheckBox на DbGrid-e
В акцесовской таблице есть логическое поле. В гриде это поле отображается как true или false. Хотелось бы видеть там галочки, как в...

Рисование checkbox в dbgrid
Всем привет ;) delphi+sql 2008 необходимо сделать чекбокс в дбгриде...использую код который валяется везде в интернете, но реализуется...

DBGrid или CheckBox?
у меня тема проги "БД Автовокзал". как лучше сделать бронь билетов для пассажира? через дбгрид (выбор по полям: номер рейса, номер...

Отображение Caption CheckBox в Dbgrid
Добрый день. Возможно типичный вопрос, но все никак не могу найти подходящего ответа. У меня имеются 4 СheckBox и Dbgrid. Мне необходимо...

Checkbox в DBGrid-е, но в разных таблицах
Доброго времени суток! У меня есть 2 разных таблиц в одной БД MySQL. Должны выводится данные из 1-ой таблицы и в дополнительной ячейке при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru