| Autor |
Beitrag |
JRegier
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mi 05.10.05 10:22
Hi, ich habe in der Db Navi eine procedure integriert dass die Felder nur dann ReadOnly sind
wenn State nicht in dsInsert, dsEdit bei manchen Db Controls klappt es aber nicht wenn ich
eine Eingabe mache ohne ReadOnly auf False zu setzen wird der State auf dsEdit gesetzt!
Wie kann man dem vorbeugen? Kann man irgendwo in den Eigenschaften setzen?
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 05.10.05 21:17
Setz doch Field.ReadOnly auf True. Warum die DBControls rumzicken, weiss ich aber auch nicht.
_________________ Na denn, dann. Bis dann, denn.
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 06.10.05 05:44
alzaimar hat folgendes geschrieben: | | Setz doch Field.ReadOnly auf True. Warum die DBControls rumzicken, weiss ich aber auch nicht. |
Ach so du meinst die Fields vom DataSet?
//EDIT
ich habe jetzt das auf Fields gemacht, jetzt kannst wircklich nicht schreiben, super,
aber wenn ich jetzt ReadOnly := (not (State in [dsEdit, dsInsert]) mache dann kann ich z.B.
in den DBLookupComboBoxen etwas ändern aber in anderen wie DBEdit DBMemo nicht,
wie kann ich von den Fields aus auf die DBControls zugreifen um ReadOnly auch da False zu setzen?
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 06.10.05 07:15
Ich habe noch nicht genau verstanden, warum Du das machen willst: Ich vermute, Du willst den Edit / Insertmode manuell, also per Button, einschalten und nicht automatisch, wenn man irgendwo was eintippt.
Versuch dein Glück doch mal mit dem Event TDataSource.OnStateChange. In der Form iterierst Du über alle Komponenten und setzt die ReadOnly-Eigenschaft jeweils entsprechend. Du musst eine Fallunterscheidung machen (is TDBLookupControl, is TDBdit ).
Wenn Du immer noch Schwierigkeiten hast (weil z.B. das TDBLookupControl einfach fehlerhaft ist), dann fange Tastendrücke ab, oder überschreibe das SetText-Event des Feldes.
Wenn das Dataset auch eine ReadOnly-Eigenschaft hat, dann sperre das Schreiben dort.
Ich mache das übrigens über die Enabled-Eigenschaft. Bei den Controls von DevExpress, die ich verwende, kann man zentral die Farbe bei 'Disabled' so einstellen, das das Ganze auch noch hüsch aussieht, denn Dunkelgrau auf Hellgrau ist ja alles Andere als leicht zu lesen.
_________________ Na denn, dann. Bis dann, denn.
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 06.10.05 07:36
Ja mit Disabled ist nicht schön!
Aber ich habe jetzt das mit ReadOnly auf DataSet.Fields in der Navi gesteuert
wo ich alle Events der DataSource abfange um die Buttons.Enabled entsprechend zu setzen
und in den Controls on Enter:
ich habe eine DBControl die ich je nach TypÜbergabe eine DBEdit, DBLookup.., usw. ist
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure DBField.OnEnter(Sender : TObject); begin case FFieldType of EDIT : TDBEdit(FField).ReadOnly := DataSource.DataSet.FieldByName(DataField).ReadOnly; COMBOBOX : TDBLookupComboBox(FField).ReadOnly := DataSource.DataSet.FieldByName(DataField).ReadOnly; MEMO : ... end; end; |
Aber das klappt auch nur auf ein Feld einmal. Ich habe auch die Navi OnClick SetFocus gemacht
um das ein OnEnter für das Feld immer ausgelöst wird, aber leider alles ohne Erfolg!
Na ja ich prüfe mal gleich ob die Fields OnEnter wircklich ReadOnly = False sind
Gibts ne andere Lösung?
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 06.10.05 08:00
Oh man die Felder sind schon nicht ReadOnly und ich kann trotzdem nichts schreiben!
Ich setze ja das Control.ReadOnly = FieldByName(..).ReadOnly ist wohl beides nicht ReadOnly!
Wo liegt denn das Problem nun?
Oder ist DataSet jetzt ReadOnly wenn ich alle Felder einmal ReadOnly gesetzt habe?
Gleich mal testet!
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 06.10.05 08:06
Wieso lässt Du nicht einfach alles in Ruhe?
Falls Du mit der BDE arbeitest, stelle sicher, das 'TQuery.RequestLive' auf True ist.
_________________ Na denn, dann. Bis dann, denn.
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 06.10.05 09:06
alzaimar hat folgendes geschrieben: | Wieso lässt Du nicht einfach alles in Ruhe?
Falls Du mit der BDE arbeitest, stelle sicher, das 'TQuery.RequestLive' auf True ist. |
OK ich lasse alles in Ruhe und lasse das Programmieren?
Ich arbeite mit den Zeos Componenten! Und ich will das wircklich nur dann etwas geändert werden kann wenn ich das mit der
Navi zulasse! Weil ich manchen Gruppen schreiben erlaube und manchen nicht!
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 06.10.05 09:10
Nee, Programmieren darfst du ruhig. Nur ist meine Erfahrung eben die, das man nicht versuchen sollte, das Standardverfahren umzubiegen. Bei Dir sehe ich aber einen Grund.. Ich kenne Zeos nicht. Das Dataset kann man doch auch auf Readonly setzen. Das sollte doch reichen. Wenn nicht, ist Zeos eben fehlerhaft.
_________________ Na denn, dann. Bis dann, denn.
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 06.10.05 10:28
alzaimar hat folgendes geschrieben: | | Nee, Programmieren darfst du ruhig. Nur ist meine Erfahrung eben die, das man nicht versuchen sollte, das Standardverfahren umzubiegen. Bei Dir sehe ich aber einen Grund.. Ich kenne Zeos nicht. Das Dataset kann man doch auch auf Readonly setzen. Das sollte doch reichen. Wenn nicht, ist Zeos eben fehlerhaft. |
Hi, ja ich setze jetzt RequestLive = False und mache Nur mit der Navi RequestLive = True
es Funktioniert alles bis auf Post da meckert er das bei ReadOnly nicht speichern kann
also muß ich noch etwas anderes setzen außer RequestLive? Oder wenn ich RequestLive = False
gesetzt habe und dann wieder True muß ich etwa neu selektieren?
|
|
|