Einzelnen Beitrag anzeigen

StepByStep

Registriert seit: 12. Nov 2014
Ort: Schleswig-Holstein
61 Beiträge
 
Delphi 7 Professional
 
#13

AW: DevExpress Grid: Selection

  Alt 23. Mär 2018, 08:16
Moin.

Puh... vielleicht besuche ich nochmal den Deutschgrundkurs... ^^

Back2Topic:

Gehen wir mal davon aus, dass folgende Daten in deinem Grid stehen:

ixBELArt
1
5
4
-1
0

In deine Anwendung markierst du nun den obersten Datensatz und machst dann STRG + SHIFT + Klick auf den vorletzten Datensatz. Was passiert ist, dass du vier mal durch dein OnCanSelectRecord-Event läufst, nämlich in der Theorie für 1, 5, 4 und -1. Im Sample von DevExpress ist es wie Delphi.Narium es vollkommen richtig beschrieben hat. ARecord ist der zu prüfende Datensatz und eben nicht der letzte der angeklickt wurde. Das ist DER Unterschied zu deinem Code.

Delphi-Quellcode:
procedure TfoAssignment.GridDBTableViewCanSelectRecord(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; var AAllow: Boolean);
var
  View: TcxGridDBTableView;
begin
  // Du holst dir zuerst die View, die ja immer gleich ist und sich nicht ändert!
  View := TcxGridDBTableView(Sender);
  // Du prüfst hier nun aber eben nicht jeden einzelnen Datensatz, sondern nur den letzten angeklickten, weil der Fokus auf den Record sich nie ändert!
  AAllow := ContainsText(View.GetColumnByFieldName('ixBELArt').EditValue, conAllowedDocumentType);
end;
Wenn du dir einen Haltepunkt in dieses Event setzt und debuggst wirst du genau dieses Szenario feststellen können. In meinem Beispiel oben würde View.GetColumnByFieldName('ixBELArt').EditValue immer -1 haben! Du musst, da führt nichts dran vorbei, ARecord nutzen, damit du alle zu selektierenden Datensätze prüfst und eben nicht nur den letzten fokussierten.

Dazu nochwas bezogen auf mein Beispiel. Stell dir mal folgenden Quellcode vor:

Delphi-Quellcode:
procedure TfoAssignment.GridDBTableViewCanSelectRecord(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; var AAllow: Boolean);
var
  View: TcxGridDBTableView;
begin
  View := TcxGridDBTableView(Sender);
  AAllow := ContainsText(View.GetColumnByFieldName('ixBELArt').EditValue, '-1');
end;
Wenn wir jetzt den obersten Datensatz "1" anklicken, dann wird dieser nicht selektiert, hat aber den Fokus! Würden wir jetzt STRG + SHIFT + Klick auf den vorletzten Datensatz machen "-1", dann laufen wir vier mal durch das Event und EditValue ist immer -1, da die Zeile nun den Fokus hat. AAllow würde also nur für diesen Datensatz gelten, alle anderen würden pauschal mit selektiert! Machen wir aber einen STRG + SHIFT + Klick auf die letzte Zeile mit dem Wert "0" würde es dafür sorgen, dass wir fünf mal dadurch laufen aber immer mit EditValue = 0. Was passiert? Alle Datensätze werden nicht selektiert, weil '0' ja nicht in '-1' ist (Containstext).

Ich hoffe das war nun verständlich, ansonsten frag einfach.

LG

Jan
Jan
  Mit Zitat antworten Zitat