Главная страница
    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.01 c
1-1125160974
rolex
2005-08-27 20:42
2005.09.18
Как сделать, чтобы Win9x не искала библиотеку?


14-1125072205
Cyberdemon
2005-08-26 20:03
2005.09.18
Это нормально что ФАК не работает и ...


1-1124952793
kyn66
2005-08-25 10:53
2005.09.18
Почему List index out of bounds(-1) ?


3-1123073442
Sergei9
2005-08-03 16:50
2005.09.18
вастоновление проекта


6-1117455483
Flame
2005-05-30 16:18
2005.09.18
proxy





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский