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
StepByStep

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

AW: DevExpress Grid: Selection

  Alt 22. Mär 2018, 07:52
Moin zusammen,

ich habe gerade das selbe Problem wie der Threadersteller und habe einmal gedebuggt, aber erst einmal kurz der Aufbau des Testprojekts:

Ich habe ein TcxGrid und eine TcxGridDBTableView. Die Daten kommen über ein TADODataSet. Meine Options der TableView sind die gleichen wie von ULIK.

Problembeschreibung:

Im Grid stehen drei Datensätze, einer davon müsste nach dem OnCanSelectRecord herausfallen, auf Grund folgender Bedingung...

Delphi-Quellcode:
if qTest.FieldByName('TEST_ANZAHL').AsInteger < 1 then
begin
  AAllow := False;
end;
... und folgender Datenbasis

TEST_ID / TEST_ANZAHL
1 / 2
2 / 1
3 / 0

Wird jetzt der oberste Satz angeklickt, funktioniert die Selektion. Ebenso bei Datensatz 2 und beim letzten nicht, da die Bedingung das ausschließt. Wählst du aber über STRG + SHIFT + Klick eine Datenmenge aus, dann gehst du so oft durch das OnCanSelectRecord-Event wie du Datensätze zusätzlich zum aktuellen Fokus ausgewählt hast. Soll heißen, wenn Datensatz 1 den Fokus hat und du wählst alle aus, dann läufst du für ID 2 und 3 nochmal durch das Event.

Jetzt kommt aber der Gag an dem Ganzen: In meinem Fall ändert sich natürlich nicht der Satz im DataSet, sondern der steht in beiden Durchläufen auf ID 3. Würde es also einen Datensatz 4 geben, der die If-Bedingung erfüllt, dann würde Datensatz 3 selektiert werden.

Ich hoffe das war so erstmal verständlich. Wenn du keine DB-Anbindung hast, musst du sonst nochmal genauer schildern was du alles hast. Bin relativ fit mit DevExpress, nutze ich nämlich täglich, da lernt man dann das ein oder andere.

LG

Jan

PS.: Ich habe keine Ahnung wie ich die Tabelle hübsch gestalten kann. Verzeiht mir.
Jan
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: DevExpress Grid: Selection

  Alt 22. Mär 2018, 08:01
Moin...
Das ist die Lösung. Aber verstehen muß ich das nicht...
Zitat DevExpress:
Delphi-Quellcode:
procedure <AForm>.<AcxGridDBTableView>CanSelectRecord(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; var AAllow: Boolean);
var
  AView: TcxGridDBTableView;
  AColumn: TcxGridDBColumn;
begin
  AView := TcxGridDBTableView(Sender);
  AColumn := AView.GetColumnByFieldName(<AFieldName>);

  AAllow := ARecord.Values[AColumn.Index] < 0; // Werteermittlung für den Vergleich aus dem Record
end;
Bild: Selection mit SHIFT
Angehängte Grafiken
Dateityp: png Shift.png (14,8 KB, 21x aufgerufen)
  Mit Zitat antworten Zitat
StepByStep

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

AW: DevExpress Grid: Selection

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

Die Frage ist ja jetzt was du genau stehen hattest, dass es nicht funktioniert.

In deinem Sample ist es so, dass der Record anders als zum DataSet sich in den Durchläufen ändert. Über den Index deiner Spalte kannst du dann auf den jeweiligen Wert innerhalb des Records zugreifen und diesen prüfen.

LG

Jan
Jan
  Mit Zitat antworten Zitat
Bentissimo

Registriert seit: 25. Apr 2006
Ort: Friedenfels
82 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: DevExpress Grid: Selection

  Alt 22. Mär 2018, 08:29
Hallo zusammen,

aus der Ticket-Beschreibung bei DevExpress würde ich tippen, dass die Abfrage auf "EditValue" nicht korrekt ist. Nur so aus dem Kopf, da ich gerade kein cxGrid vor mir habe.
Stephan Schmahl
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: DevExpress Grid: Selection

  Alt 22. Mär 2018, 08:39
Moin...
Der Ursprungscode:
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, conAllowedDocumentType); // nicht bei SHIFT!!!!
end;
  Mit Zitat antworten Zitat
StepByStep

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

AW: DevExpress Grid: Selection

  Alt 22. Mär 2018, 10:46
Also die View ist jedes Mal wo du da reinkommst identisch, ebenso die Spalte. Den Wert liest du dann aber eben nicht aus dem aktuellen Record, sondern dieser wird immer den Wert der in dem angeklickten Datensatz steht. Somit läufst du x-Mal dadurch und schaust jedoch immer auf den selben Wert.

So würde ich mir das ohne es gedebuggt zu haben mal erschließen. ^^

LG

Jan
Jan
  Mit Zitat antworten Zitat
Delphi.Narium

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

AW: DevExpress Grid: Selection

  Alt 22. Mär 2018, 13: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
Antwort Antwort


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 02:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz