AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DevExpress Grid: Selection

Ein Thema von haentschman · begonnen am 21. Mär 2018 · letzter Beitrag vom 23. Mär 2018
Antwort Antwort
Seite 2 von 2     12   
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#11

AW: DevExpress Grid: Selection

  Alt 22. Mär 2018, 14:41
Ich finde das Beispiel (obwohl ich die Komponenten überhaupt nicht kenne und nie genutzt habe) sehr verständlich (interpretiere mal ziemlich frei):
Delphi-Quellcode:
procedure <AForm>.<AcxGridDBTableView>CanSelectRecord(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; var AAllow: Boolean);
var
  AView: TcxGridDBTableView;
  AColumn: TcxGridDBColumn;
begin
  AView := TcxGridDBTableView(Sender); // Das Grid für 'nen einfachen Zugriff.
  AColumn := AView.GetColumnByFieldName(<AFieldName>); // Die Spalte, die wir zum Vergleich heranziehen wollen.
  // ARecord ist der Datensatz, der geprüft werden soll (und nicht der, der angeklickt wurde).
  // AColumn.Index gibt die Position der Spalte an, welche im ARecord geprüft werden soll.
  AAllow := ARecord.Values[AColumn.Index] < 0; // Hier die Bedingung prüfen.

  // Aber:
  // Hier wird der Wert geprüft, der "zufällig" zuletzt den Focus zum Editieren hatte.
  // Der muss weder zum zu prüfenden Datensatz (ARecord) gehören, noch schon in der Datenbank stehen.
  AAllow := ContainsText(View.GetColumnByFieldName('ixBELArt').EditValue, conAllowedDocumentType);
end;
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#12

AW: DevExpress Grid: Selection

  Alt 23. Mär 2018, 07:14
Moin...
Zitat:
Den Wert liest du dann aber eben nicht aus dem aktuellen Record, sondern dieser wird immer den Wert der in dem angeklickten Datensatz steht.
...dann erkläre mal das:
Zitat:
Alle Datensätze sind in der Selection enthalten. ...auch die die mit AAllow = False.
Im Original Code werden ALLE die nicht gewünscht worden sind, beim Durchlauf mit AAllow = False (Bedingung = True) gekenzeichnet...aber trotzdem selektiert.
  Mit Zitat antworten Zitat
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
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#14

AW: DevExpress Grid: Selection

  Alt 23. Mär 2018, 10:59
Moin...
Zitat:
Ich hoffe das war nun verständlich, ansonsten frag einfach.
...aber sicher doch.

Frage:
Wie erklärst du, daß von 5 gewählten Datensätzen 2 rausfallen sollen, im OnCanSelect Record (5x) 2 Stück mit AAllow = False gekennzeichnet werden? Das sollte nach deiner Meinung (View.GetColumnByFieldName('ixBELArt').EditValue) komplett True oder Komplett False sein...weil sich der Datensatz nicht ändert?
Zitat:
In meinem Beispiel oben würde View.GetColumnByFieldName('ixBELArt').EditValue immer -1 haben!
...eben nicht. Sonst hätte ich das gemerkt. Aber der Debugger sagte was anderes.

An dieser Stelle gebe ich auf...
  Mit Zitat antworten Zitat
StepByStep

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

AW: DevExpress Grid: Selection

  Alt 23. Mär 2018, 13:26
Also jetzt wird das ja interessant.

Ich habe in meinem Testprojekt das OnCanSelectRecord-Event implementiert und habe die von mir genannte Bedingung geprüft. In allen Durchläufen ist die EditValue immer -1 gewesen, weil eben die Column die da zurückkommt die Fokussierte war... Genau so wie du es wiedergegeben hast.

Dieses Handling was ich da beschrieben habe, kommt ja direkt von der Komponente. Bist du dir sicher, dass du ein TcxGrid und eine TcxGridDBTableView verwendest?

Ansonsten... ja, bin ich glaube ich ratlos. So wie es bei mir hier läuft ist es jedenfalls "richtig" und auch sinnvoll. Warum die EditValue sich bei dir dann zwar ändert und AAllow aber nichts bewirkt, verstehe ich nicht ohne das direkt vor Augen zu haben.

Sorry!

LG
Jan
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#16

AW: DevExpress Grid: Selection

  Alt 23. Mär 2018, 14:28
Danke...
Kein Problem. Ist ja gelöst. Die Devexpress Lösung funktioniert ja. Das Wochenende ist gerettet. Die nächste Frage habe ich schon...
Zitat:
dass du ein TcxGrid und eine TcxGridDBTableView verwendest?
...ja.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz