Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Вниз

EHGrid колонка   Найти похожие ветки 

 
xroot   (2005-07-30 11:10) [0]

Как мне создать свободную колнку в EHGrid состоящую из CheckBox.
Точнее это я сделал, но как мне сделать так чтобы пользователь мог бы менять состояние checkbox как обычно (по нажатию на таковой).


 
jack128 ©   (2005-07-30 16:51) [1]

а откуда значение этого поля должно браться??? и что должно делаться когда юзер меняет значение поля??


 
xroot   (2005-07-30 16:55) [2]

Значение не берется неоткуда (по дефолту: не отмечено), просто потом при нажатию на кнопку ПРИНТ происходит печать записей у которых checkbox отмечены.


 
xroot   (2005-07-31 11:30) [3]

Ну хотя кто нить помогите. Застрял на этой проблеме.


 
xroot   (2005-08-03 22:45) [4]

Блин, неужели никто не знает?


 
sniknik ©   (2005-08-03 23:28) [5]

ну почему же, знают многие, отвечать только не хотят, себе дороже выйдет.

тем более что все уже сказано...
> а откуда значение этого поля должно браться??
> Значение не берется неоткуда (по дефолту: не отмечено)
берется ниоткуда, значит и записывается в никуда...

> просто потом при нажатию на кнопку ПРИНТ...
ничего не происходит. т.к. нет чекбоксов которые отмечены (негде значение хранить)

p.s. сказано применительно к стандартным компонентам. кто знает, может в этом EHGrid данные держатся в мемотаблице к которой добавить лищнее поле ничего не стоит, и они так и делают на каждый чекбокс... но не думаю что что это так, скорее всего там это тоже самое, что в стандарте.


 
xroot   (2005-08-04 00:06) [6]

А какой способ можно релизовать для выполнения данной задачи Вносить данные по отметкам чекбоксов в обычную таблицу базы, а потом перезагружать основную таблицу слишком долго и (на мой взгляд) не оптимально.


 
ANB ©   (2005-08-04 10:39) [7]


> xroot   (04.08.05 00:06) [6]

Два способа (которые я видео)
1. Липовое поле в дейтасете.
2. Своя реализация выделения (массив или TList или встроенный массив в гриле (забыл, как называется))


 
jack128 ©   (2005-08-04 12:10) [8]

ANB ©   (04.08.05 10:39) [7]
1. Липовое поле в дейтасете.

что такое "липовое поле в датасете" ? Как его создать в TTable?

xroot   (04.08.05 0:06) [6]

к какому dataset"у подключен грид? в зависимости от этого варианты очень разнятся от "это невозможно сделать" до "это делается в два клика мышью"


 
Виталий Панасенко   (2005-08-04 12:20) [9]

Можешь создать вычисляемое поле и по клику/двойному клику менять его значение...


 
msguns ©   (2005-08-04 13:03) [10]

Делается так (один из вариантов):

Type
PSelDSRec = ^RSelRect;
RSelRect = record
  ID: integer;  // ID отмеченной записи
  Misc: string; // Комментарий для показа в списке выбранных
end;
...
Form1 = Class(TForm)
 ...
 public
 ListSelRec: TList;
 ...

procedure TForm1.OnCreate(Sender: TObject);
begin
 ...
 ListSelRec := TList.Create;
end;

procedure TForm1.OnClose(Sender: TObject);
var
 i: integer;
begin
 ...
 for i: 0 to ListSelRec.Count-1 do
   dispose(PSelDSRec(ListSelRec[i]));
 ListSelRec.Free;
end;

procedure TForm1.DBGrid1OnDblClick(Sender: TObject);
// Если акт.запись есть в списке, выкинуть ее, если нет - добавить
// Fields[0] датасета - UID НД
var
 i: integer;
begin
 with TDBGrid(Sender).DataSource.DataSet do
   begin
    for i := 0 to ListSelRec.Count-1 do
      if PSelDSRec(ListSelRec[i])^.ID=Fields[0].AsInteger then
        begin
         dispose(PSelDSRec(ListSelRec[i]));
         ListSelRec.Delete(i);
         exit;  // Выход из процедуры
        end;
    ListSelRec.Add(New(PSelDSRec));
    PSelDSRec(ListSelRec[ListSelRec.Count-1])^.ID := Fields[0].AsInteger;
    PSelDSRec(ListSelRec[ListSelRec.Count-1])^.Misc := ...;
   end;
 TDBGrid(Sender).Update;
end;
   
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);
// Нарисовать псысу в "пустой колонке грида, если запись помечена
var
 i: integer;
begin
 if Column.Field=<Имя поля, которое не отображается> then
    for i := 0 to ListSelRec.Count-1 do
      if PSelDSRec(ListSelRec[i])^.ID=TDBGridSender).DataSource.DataSet.Fields[0].AsInteger then
        begin
         Form1.ImageList.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,)<индекс иконки с галочкой>);
         break;
        end;
end;


ЗЫ. Пишу с кондачка, подходящего короткого примера нет под рукой. Смысл, думаю, понятен.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.013 c
1-1125159399
lkz
2005-08-27 20:16
2005.09.18
Оболочка для вопросов-ответов


14-1125054731
geidarka
2005-08-26 15:12
2005.09.18
подключение к MySQL


4-1122445245
MegaVolt
2005-07-27 10:20
2005.09.18
Как отловить двойной клик на заголовке ListView возле разделителя


2-1123756104
Гость22
2005-08-11 14:28
2005.09.18
Куда кидать инишку?


3-1123143946
Ega23
2005-08-04 12:25
2005.09.18
Разнесение данных по двум таблицам: имеел ли смысл?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский