Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2012, 01:26   #1
leroy
Пользователь
 
Регистрация: 10.05.2011
Сообщений: 11
Радость CheckBox в DbGrideh

Всем Добрый вечер.
Cтолкнулся с проблемой.Перечитал все Форумы (и этот в том числе), но чего-то туплю, ничего работающего не нашёл. Помогите плиззз.
Вопрос:
Можно ли создать 1 колонку, чтобы выбирать строки по своему желанию (через чекбоксы)?

П.С.
1)создал колонку в Базе(мсскл - cast(0 as bit) as Perech), поместил в АДО, поместил в грид

Код:
AutoEdit:=True;
ReadOnly:=False; (и в гриде, и в АДО)
CheckBox:=True;
Появляется возможность менять состояние, но чуть захочу убрать выделение, пропадает значение Чекбокса.
2) Если создать колонку в Гриде без подвязки к АДО, то ничего не могу выбрать.
leroy вне форума Ответить с цитированием
Старый 11.06.2012, 09:31   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Мудрить здесь особо нечего. DBGridEh вполне самостоятельно разберется показывать CheckBox в ячейках или нет.
Для этого колонка в таблице БД должна быть типа bit. И этого достаточно.
Код:
создал колонку в Базе(мсскл - cast(0 as bit) as Perech)
Мягко говоря, необычный способ создания колонки в БД. Любые колонки создаются указанием ее имени и типа данных. Зачем здесь функция CAST, которая не шибко коррелируется с процессом создания колонки в таблице базы данных?.

Типичное соединение сетки с БД:
ADOConnection (строка соединения с нужной БД) -> ADOQuery (ADODataSet, ADOTable) -> DataSource -> DBGridEh (DBGrid).
Прик вне форума Ответить с цитированием
Старый 11.06.2012, 23:40   #3
leroy
Пользователь
 
Регистрация: 10.05.2011
Сообщений: 11
Печаль

Цитата:
Сообщение от Прик Посмотреть сообщение
Мудрить здесь особо нечего. DBGridEh вполне самостоятельно разберется показывать CheckBox в ячейках или нет.
Для этого колонка в таблице БД должна быть типа bit. И этого достаточно.
Код:
создал колонку в Базе(мсскл - cast(0 as bit) as Perech)
Мягко говоря, необычный способ создания колонки в БД. Любые колонки создаются указанием ее имени и типа данных. Зачем здесь функция CAST, которая не шибко коррелируется с процессом создания колонки в таблице базы данных?.

Типичное соединение сетки с БД:
ADOConnection (строка соединения с нужной БД) -> ADOQuery (ADODataSet, ADOTable) -> DataSource -> DBGridEh (DBGrid).
Прости, не правильно сказано:
Создан Запрос, много колонок... и одна из них такова.
Код:
Select JurnalDogovorov.nomerDogovora, бла бла бла PerNed.nomerDogovora, BazaKlientov.SokrNazvLP,Peres =CAST(Null as Bit)
Вот если её использовать (эту колонку) - Значения могу менять (только в значение True),но оно отображается только до тех пор пока не переключу на другую запись. (соответственно несколько записей выбрать не могу).

Последний раз редактировалось leroy; 11.06.2012 в 23:45.
leroy вне форума Ответить с цитированием
Старый 12.06.2012, 07:10   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

На странице в разделе "КАК ОТМЕТИТЬ НЕСКОЛЬКО СТРОК ИЛИ "НЕ MultiSelect'ОМ ЕДИНЫМ..."" решение проблемы.
А запросом этого не сделать.
Прик вне форума Ответить с цитированием
Старый 13.06.2012, 00:50   #5
leroy
Пользователь
 
Регистрация: 10.05.2011
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
На странице в разделе "КАК ОТМЕТИТЬ НЕСКОЛЬКО СТРОК ИЛИ "НЕ MultiSelect'ОМ ЕДИНЫМ..."" решение проблемы.
А запросом этого не сделать.
Не работает. Можете ещё посоветовать? или сбросьте пример рабочего проекта?
leroy вне форума Ответить с цитированием
Старый 13.06.2012, 08:11   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Работающий тестовый проект. Кое-что пришлось подрихтовать, но по несущественной мелочи.
Чекбоксы выглядят отвратно, но их можно рисовать как хочется, а не только функцией DrawFrameControl.
Запускался в D7 и D2010.
Вложения
Тип файла: rar GridEh_checkfield.rar (690.1 Кб, 201 просмотров)
Прик вне форума Ответить с цитированием
Старый 13.06.2012, 21:13   #7
leroy
Пользователь
 
Регистрация: 10.05.2011
Сообщений: 11
Радость

Цитата:
Сообщение от Прик Посмотреть сообщение
Работающий тестовый проект. Кое-что пришлось подрихтовать, но по несущественной мелочи.
Чекбоксы выглядят отвратно, но их можно рисовать как хочется, а не только функцией DrawFrameControl.
Запускался в D7 и D2010.
Я очень очень благодарен. Спасибо огромное.
leroy вне форума Ответить с цитированием
Старый 07.10.2012, 01:31   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Работающий тестовый проект. Кое-что пришлось подрихтовать, но по несущественной мелочи.
Чекбоксы выглядят отвратно, но их можно рисовать как хочется, а не только функцией DrawFrameControl.
Запускался в D7 и D2010.
Спасибо, очень красиво да визуальные вид. Но как Удалить или копировать строки который отмечали ???
xxbesoxx вне форума Ответить с цитированием
Старый 07.10.2012, 08:43   #9
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

В компоненте с именем ListSelect (TList) содержатся значения идентификаторов строк, которые были отмечены (в таблице это поле имеет наименование "ID").
Используя запомненные в ListSelect значения, можно манипулировать записями таблицы.
Удалять, например, можно так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  I : Integer;
  S : string;
begin
  S := '';
  for I := 0 to ListSelect.Count-1 do
    S := S + IntToStr(Integer(ListSelect.Items[I]))+',';
  if S = '' then Exit;
  S := '('+Copy(S, 1, Length(S)-1)+')';
  ADOQuery2.SQL.Text := 'delete from test where ID in ' + S;
  ADOQuery2.ExecSQL;
  
  ADOQuery1.DisableControls;
  ADOQuery1.Close;
  ADOQuery1.Open;
  ADOQuery1.EnableControls;
end;
Что значит копировать - непонятно. Прежде всего надо бы знать КУДА копировать и КАКИЕ поля.
Прик вне форума Ответить с цитированием
Старый 07.10.2012, 10:18   #10
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
В компоненте с именем ListSelect (TList) содержатся значения идентификаторов строк, которые были отмечены (в таблице это поле имеет наименование "ID").
Используя запомненные в ListSelect значения, можно манипулировать записями таблицы.
Удалять, например, можно так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  I : Integer;
  S : string;
begin
  S := '';
  for I := 0 to ListSelect.Count-1 do
    S := S + IntToStr(Integer(ListSelect.Items[I]))+',';
  if S = '' then Exit;
  S := '('+Copy(S, 1, Length(S)-1)+')';
  ADOQuery2.SQL.Text := 'delete from test where ID in ' + S;
  ADOQuery2.ExecSQL;
  
  ADOQuery1.DisableControls;
  ADOQuery1.Close;
  ADOQuery1.Open;
  ADOQuery1.EnableControls;
end;
Что значит копировать - непонятно. Прежде всего надо бы знать КУДА копировать и КАКИЕ поля.
Прошу прошения . 1. Запрос на Удаление запись не работает 2. Копировать я имел ввиду на пример проекте tab1 и tab2 отметил несколько запись на tab1 и хочу копировать на tab2.
Мне нравится ваши пример, но хочу что у него бил реальный смысл и не только визуальные.
Изображения
Тип файла: jpg smch.jpg (67.1 Кб, 183 просмотров)
Вложения
Тип файла: rar CheckBox+DBGridEh+test.rar (525.9 Кб, 97 просмотров)

Последний раз редактировалось xxbesoxx; 07.10.2012 в 10:29.
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
checkbox в dbgrideh nervniy БД в Delphi 3 20.10.2010 18:01
DBGridEh Багдат87 Компоненты Delphi 1 02.10.2010 18:37
DBGridEh vdalest БД в Delphi 0 08.07.2010 23:05
Использование Checkbox в DBGridEh SlavaSH БД в Delphi 3 25.11.2009 17:16
из DBGridEh в Exel Abay БД в Delphi 3 18.09.2007 09:10