![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBGrid [D5]
MakNik © (2003-11-05 20:21:00)
Подскажите, пожалуйста, как красиво сделать DBGrid так, чтобы вместо булевых полей можно было выбирать галочкой??
Arm79 (2003-11-06 21:41:00) [1]
Если есть книжка Марко Кэнту "Программирование для профессионалов", то там описано, как это делать без сторонних компонент. Я по памяти не воспроизведу код, но смысл был в перемещении чека в положение текущей записи
}|{yk (2003-11-06 17:51:00) [2]
>>Кажется избыточным использовать такой могучий компонент при работе с ClientDataSet-ом: ведь оба занимаются кэшированием данных!
Согласен. Но ведь как удобно! Да и в вопросе вроде не упоминалось про ClientDataSet
Flash (2003-11-06 17:17:00) [3]
> DisplayText - это не var параметр!
Не знаю, как в D7, а в D6 он как раз таки var. И все работает замечательным образом.
sokohigh (2003-11-06 17:03:00) [4]
Еще по поводу QuantumGrid:
Кажется избыточным использовать такой могучий компонент при работе с ClientDataSet-ом: ведь оба занимаются кэшированием данных!
sokohigh (2003-11-06 16:59:00) [5]
> }|{yk ©
А деньги?!
}|{yk (2003-11-06 16:47:00) [6]
QuantumGrid
sokohigh (2003-11-06 16:36:00) [7]
> Flash ©
Наверное предполагалось таким образом (DisplayText:=false) предотвратить появление значений "false" и "true" поверх нарисованной катринки при входе в режим редактирования?
У меня это получилось только с помощью удаления dgEditing из Options грида в событии OnColEnter для boolean-полей и возвращения на место для всех остальных. Хоть это и не очень красиво, но работает.
sokohigh (2003-11-06 16:15:00) [8]
> Flash © (06.11.03 14:28) [9]
> в OnGetText нужного поля в датасете:
> DisplayText := false;
DisplayText - это не var параметр! Он лишь указывает, в каком контексте сработал OnGetText - при показе значения поля или при его редактировании (для D7).
Flash (2003-11-06 14:28:00) [9]
в OnGetText нужного поля в датасете:
DisplayText := false;
procedure TForm1.Grid1CellClick(Column: TColumn);
begin
if (Grid1.SelectedField.FieldName = "MyField" ) then begin
if (Grid1.Fields[0].AsBoolean=false) then begin
// допустим, это поле [0]
Grid1.Fields[0].AsBoolean := true;
Grid1.Refresh();
end else begin
Grid1.Fields[0].AsBoolean := false;
Grid1.Refresh();
end;
end;
end;
Тут еще нужно проверять датасет на режим редактирования.
procedure TForm1.Grid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.ID=0) then begin
if (Grid1.Fields[0].AsBoolean=true) then
DrawFrameControl(Grid1.Canvas.Handle, TRect(Rect), DFC_BUTTON, DFCS_CHECKED)
else
DrawFrameControl(Grid1.Canvas.Handle,TRectRect), DFC_BUTTON,DFCS_BUTTONCHECK);
end;
end;
MakNik (2003-11-06 13:30:00) [10]
А как, пользуясь приведенным примером, отрабатывать событие при редактировании, чтобы при щелчке менялась картинка и, соответственно, значение поля?
Kadr (2003-11-06 12:20:00) [11]
EhLibXXX
http://www.ehlib.com
NAlexey (2003-11-06 10:25:00) [12]
Вы что все сговорились? Что не вопрос, то возьми эхлиб, что не вопрос то возьми эхлиб.
Term (2003-11-06 10:20:00) [13]
Удалено модератором
Yurij (2003-11-06 10:13:00) [14]
Удалено модератором
viktor (2003-11-06 02:55:00) [15]
Есть прекрасная библиотека EhLib2.0, там это уже реализовано. Можно не только галочки, но и рисунки вставлять. Бесплатная. Могу выслать.
WithOut Any ... (2003-11-05 23:08:00) [16]
Думаю, что можно через Looup поле, которое необходимо присоединить, прдварительно создав таблицу с этими полями. Не проверял, но если необходимо проверю и вышлю код
cezar (2003-11-05 22:58:00) [17]
Например, так (в примере это поле "Plast"):
procedure TfmMain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
if (Column.FieldName="Plast") then
begin
if TDBGrid(Sender).DataSource.DataSet.FieldByName("Plast").AsBoolean
then begin
ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left+18,Rect.Top, 0);
end else begin
TDBGrid(Sender).Canvas.Brush.Color := clWindow;
TDBGrid(Sender).Canvas.FillRect(Rect); end
end else
begin
TDBGrid(Sender).Canvas.Brush.Color := clWindow;
TDBGrid(Sender).Canvas.FillRect(Rect); end
end;
end;
end;
Изображение "галочки" находится в ImageList2