2016-05-05 6 views
0

D5, ZEOS 6.6, SQLite.Stoppen Sie die automatische Bearbeitung in TDBGrid

Ich habe srcAccount.AutoEdit = False;

Ich habe alle Edit-Funktionen in den TDBGrid-Optionen auf False festgelegt. Die Optionen true sind Indicator, Grind Lines und Titles.

Ich habe ein Formular mit ein paar TDBEdits und einem TDBGrid, das alle aktuellen Konten anzeigt.

Wenn der Benutzer die Schaltfläche „Neu“ für ein neues Konto klickt habe ich

dbedAcct.SetFocus; 
tblAccounts.Insert; 

Wenn nach Anklicken der Schaltfläche Neu, die Benutzerkontonamen blättern möchte zu prüfen oder geschieht im Raster klicken , speichert es die neuen Daten und verliert den Einfügemodus.

Wie kann ich dies verhindern? Ich muss für sie in der Lage sein, Kontonamen zu überprüfen.

Oder ist das ein Fehler mit D5? Wenn ja, wie arbeite ich daran?

Ich habe auch versucht mit SMDBGrid und es tut genau das Gleiche. http://www.scalabium.com/smdbgrid.htm

Antwort

4

Ich brauche für sie in der Lage sein, Kontonamen zu überprüfen.

Sie können dies nicht mit dem gleichen Raster + Datensatz tun, wenn Sie dem Benutzer erlauben, Daten in das Raster einzugeben. Sie erstellen dieses Problem für sich selbst, indem Sie versuchen, das Raster für die Dateneingabe und -suche gleichzeitig zu verwenden. Eine einfache Lösung besteht darin, das Raster für die Suche zu verwenden und für die Einfügungen ein separates Formular (oder ein Feld in derselben Form wie das Raster) zu verwenden, die mit verschiedenen Dataset-Instanzen verbunden sein müssen.

Die Sache ist, Sie können nicht um einen Datensatz scrollen (wie Sie andere Datensätze nachschlagen müssen), während es in der Mitte eines Datensatzes ist. Der dsBrowse-Status, der für ein Dataset benötigt wird, um das Scrollen zu ermöglichen, und der dsInsert-Status, der eingefügt werden muss, schließen sich gegenseitig aus. Wenn Sie versuchen, den Datensatz zu scrollen, wird automatisch der ausstehende Einfügevorgang, wie Sie ihn gefunden haben, veröffentlicht.

Sie benötigen also tatsächlich zwei Datensatzinstanzen, eine zum Suchen und eine für Einfügungen. Wenn Sie zwei clientseitige ClientDataSet-Instanzen verwenden, kann dies sehr einfach sein, da Sie die Daten mit der Data-Eigenschaft der CDS() problemlos von einer in die andere kopieren können, um eine lokale Kopie für die Suche zu erstellen trivial. Oder, wenn Sie bevorzugen, können Sie einen geklonten Cursor verwenden - siehe http://edn.embarcadero.com/article/29416

+0

Danke, ich hatte versucht, aber es wird viel zu kompliziert versuchen, zwei separate Tabellen zu verwalten. Beim Hinzufügen muss ich beides hinzufügen, beim Löschen muss ich "Locate" und das selbe nochmal und beim Scrollen muss ich den anderen anpassen, der in eine Todesschleife geraten kann. Geh einfach zu unordentlich, also dachte ich, ich würde fragen, ob jemand ein besseres System gefunden hat. – user2175495

+0

Wenn Sie tatsächlich zwei clientseitige ClientDataSet-Instanzen verwenden, kann dies sehr einfach sein, da Sie die Daten mit der Data-Eigenschaft des CDS problemlos von einem zum anderen kopieren können, um eine lokale Kopie für die Suche zu erstellen ist trivial. – MartynA

+0

Sie müssen Daten nicht kopieren, um zwei Ansichten mit CDS zu haben: http://edn.embarcadero.com/article/29416 –