Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизКак DBGridEh сделать запрет на изменение определенных ячеек? Найти похожие ветки
← →
waw (2003-09-19 16:26) [0]Как DBGridEh сделать запрет на изменение определенных ячеек?
Точно так же как в Excel. У меня есть признак по которому я поеределяю нужно блокировать ячейку или нет. Но как сообщить об этом DBGridEh ????
← →
Stas (2003-09-19 16:33) [1]Dbgrideh1.columns[0].readOnly:=true;
← →
waw (2003-09-19 16:45) [2]Спасибо конечно. Но мне не колонку нужно болкировать, а одну из ячеек.
← →
Stas (2003-09-19 16:55) [3]Я так понимаю тебе нужно закрывать колонку но в некоторых записях. Можешь на событие DataSet AfterScroll проверять условие и в зависимости от этого закрывать/открывать колонку
← →
Sandman25 (2003-09-19 16:56) [4]В событии OnSelectCell Grid.ReadOnly := True;
← →
NAlexey (2003-09-19 16:57) [5]>Как DBGridEh сделать запрет на изменение определенных ячеек?
А как в любом Grid сделать запрет на изменение определенных ячеек так и в DBGridEh.
← →
waw (2003-09-19 17:00) [6]Sandman25 ©
OnSelectCell - не вижу такого события????
У меня версия EhLib 2.4a, а у тебя какая?
← →
NAlexey (2003-09-19 17:06) [7]Да, какая у тебя?
← →
Sandman25 (2003-09-19 17:20) [8][6] waw © (19.09.03 17:00)
Извиняюсь, не заметил, что вопрос по DBGridEh. Я про стандартный DBGrid говорил. OnCellClick событие называется.
← →
waw (2003-09-19 18:13) [9]Sandman25 © не срабатывает у меня OnCellClick событие по чему то?????
← →
Sandman25 (2003-09-19 18:15) [10]Не срабатывает при выборе другой (нетекущей) ячейки мышой?
← →
waw (2003-09-19 18:19) [11]Ни мыщкой ни табуляцией. Я поставил точку останова в обработчике этого события и ни разу программа не прервалась.
← →
Sandman25 (2003-09-19 18:22) [12]Попробуйте вместо точки останова поставить ShowMessage("hi").
← →
waw (2003-09-19 18:53) [13]> Sandman25
РазобралсяOnCellClick
не срабатвает если установлена опцияdgAlwaysShowEdit := true
Отключил эту опцию, событие OnCellClick начало срабатывать, но только от клика мышкой на ячейке. Если я попадаю в защищенную ячейку а затем курсором перемещаюсь в НЕ защищенную редактирование становится невозможным. В событиие OnCellClick, передается параметр - Column: TColumnEh, если написать так:
Column.ReadOnly := true;
блокируется вся колонка.
> Stas © (19.09.03 16:55) [3]
> Я так понимаю тебе нужно закрывать колонку но в некоторых
> записях. Можешь на событие DataSet AfterScroll проверять
> условие и в зависимости от этого закрывать/открывать колонку
Событие AfterScroll возникает при изменении записи, а мне необходимо заблокировать ячейку. Если я нахожусь в одной записи тогда все ячейки, при использовании AfterScroll будут заблокированы.
Ну неужели нет механизма отлавливать событие перемещения по ячейкам? Неужели прийдется обрабатывать клавиши перемещения, и события мыши?
← →
Sandman25 (2003-09-19 18:56) [14]> затем курсором перемещаюсь
Так обрабатывайте еще и OnKeyDown
← →
Stas (2003-09-22 09:32) [15]waw © (19.09.03 18:53) [13]
>Событие AfterScroll возникает при изменении записи, а мне >необходимо заблокировать ячейку. Если я нахожусь в одной >записи тогда все ячейки, при использовании AfterScroll будут >заблокированы.
ВСЕ ячеки в одной колонке, а когда ты перейдешь на другую запись(которую иожно редактировать), то все ячейки в данной колонке разблокируются.
Если тебе нужно отловить событие перемещения по колонкам, то OnColExit и OnColEnter
← →
VAleksey (2003-09-22 10:33) [16]При чем тут вообще грид, когда работать нужно с набором данных?
PS
Любите книги, источник знаний.
PPS
Есть у DataSet-а замечательное событие BeforeEdit называется ;-). Достаточно просто сказать в нем "Abort" по определенному условию.
← →
Hooch (2003-09-22 10:45) [17]я делаю так: у TDBGridColumnEh есть событие OnGetCellParams
(Sender: TObject; EditMode: Boolean; Params: TColCellParamsEh)
if EditMode and (TDBGridColumnEh(Sender).Field.AsInteger < 0 ) then
TDBGridColumnEh(Sender).Grid.EditorMode := False
и будет сказка
← →
waw (2003-09-22 13:46) [18]
> VAleksey © (22.09.03 10:33) [16]
> При чем тут вообще грид, когда работать нужно с набором
> данных?
Причем тут DataSet, мне нужно не допустить до вознакновения события редактирования! Мне в гриде нужно запретить саму возможность входа в режим редактирования. Хотя это тоже решение вопроса. Подскажите где взять процедуру "Abort"?
> Hooch © (22.09.03 10:45) [17]
> я делаю так: у TDBGridColumnEh есть событие OnGetCellParams
> .... и будет сказка
Спасибо за дельный совет. Попробую, только до конца я не понял как это сделать.
← →
waw (2003-09-22 13:56) [19]Спасибо всем. Hooch © вы помогли решить проблему окончательно!
← →
alex_raider (2003-09-22 14:42) [20]А я бы тебе посоветовал вообще, никогда не редактировать данные в гриде. Сделай его ReadOnly := true;
Много проблем уйдет...
Делай модальные диалоги, расставляй на них DBEdit`ы (унаследуйся от формы-темплейта, которую я сейчас тебе дам).
и пиши на обработчиках своего Dataset.AfterEdit() Dataset.AfterEdit() такой код:
procedure TDataModule.OrdersAfterInsert(DataSet: TDataSet);
begin
f_e_orders.ShowModal(Dataset);
end;
а темплейт вот такой:
--------------------------------
unit e_dlg_template;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, DB;
type
Tf_dlg_template = class(TForm)
paBottom: TPanel;
bOK: TBitBtn;
bCancel: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
public
FDataSet: TDataSet;
function ShowModal(Dataset: TDataset): Integer;
end;
//var
// f_dlg_template: Tf_dlg_template;
implementation
{$R *.dfm}
procedure Tf_dlg_template.FormCreate(Sender: TObject);
var
SysMenu: HMenu;
begin
BorderStyle := bsDialog;
BorderIcons := [biSystemMenu];
Position := poScreenCenter;
SysMenu := GetSystemMenu(Handle, False);
Windows.EnableMenuItem(SysMenu, SC_CLOSE, MF_DISABLED or MF_GRAYED);
end;
procedure Tf_dlg_template.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := false;
if modalresult = mrOK then FDataset.Post
else FDataset.Cancel;
CanClose := true;
end;
function Tf_dlg_template.ShowModal(Dataset: TDataset): Integer;
begin
FDataSet := Dataset;
Result := inherited ShowModal;
end;
end.
← →
waw (2003-09-22 15:32) [21]Спасибо
> alex_raider ©
Это я тоже пробовал, но все равно огромное спасибо за помощь. Твоим вариантом я тоже обязательно воспользуюсь.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.011 c