AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

cxGrid Anzahl selektierter Datensätze

Ein Thema von Mazen · begonnen am 9. Aug 2012 · letzter Beitrag vom 9. Aug 2012
Antwort Antwort
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#1

cxGrid Anzahl selektierter Datensätze

  Alt 9. Aug 2012, 10:24
Ich hoffe hier gibt es einige die sich mit dem Express Quantum Grid auskennen.
Denn genau da liegt grade mein Problem.

Ich habe schon eine Funktion gefunden die mir eigentlich die Anzahl der selektierten Reihen zurückgeben sollte, und zwar tableView.Controller.SelectedRecordCount.

Problem ist nur das mir diese Funktion (und auch alle anderen die ich probiert habe) nur Werte > 1 zurückgeben. Also auch wenn ich als Benutzer kein Datensatz angeklickt habe gibt mir diese Funktion "1" zurück. Wenn ich mehrere makiere gibt sie mir allerdings immer die richtige Zahl mit.

Ich denke das hängt irgendwie mit diesem "internen Pointer" in der Datenmenge zusammen der ja immer auf ein Feld zeigt. (Zu steuern mit First, Last, Next, Previous)
Ich nutze eine SOAPMemTable als Datenquelle und glaube das eben dieser Pointer vom Grid auch als Selektion gewertet wird da nämlich genau der Datensatz, auf dem der Pointer steht etwas grau hinterlegt ist im Grid.

Gibt es eine Möglichkeit zu erkennen wieviele Datensätze wirklich vom Benutzer selektiert worden sind? Also wenn keine Auswahl getroffen wurde auch ein "0" zurückgegeben wird?
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#2

AW: cxGrid Anzahl selektierter Datensätze

  Alt 9. Aug 2012, 11:04
Ist der fokussierte Datensatz nicht auch immer selektiert?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.100 Beiträge
 
Delphi 12 Athens
 
#3

AW: cxGrid Anzahl selektierter Datensätze

  Alt 9. Aug 2012, 11:11
Nein, vorallem wenn Multiselect, dann muß das nicht so sein.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#4

AW: cxGrid Anzahl selektierter Datensätze

  Alt 9. Aug 2012, 11:20
Doch.

Habe ein TdxMemData (drei zeilen mit testdaten), ein Datasource, ein TcxGrid mit einem DBGridTableView und einen Timer.

Beim Start zeigt mir der Timer, das 0 Reihen selektiert sind.
Klicke ich eine Zeile an dann ist N=1 und die selektierte Zeile wird angezeigt, bewege ich den Fokus mit den Cursortasten, bleibt die eins bestehen und ich sehe auch, welche Zeile selektiert ist.

Hier ein hingerotzter Test.
Delphi-Quellcode:
unit Unit14;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
  cxStyles, cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData,
  StdCtrls, ExtCtrls, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
  dxmdaset, cxGridLevel, cxClasses, cxGridCustomView, cxGrid;

type
  TForm14 = class(TForm)
    cxGrid1DBTableView1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
    DataSource1: TDataSource;
    dxMemData1: TdxMemData;
    dxMemData1Feld: TStringField;
    cxGrid1DBTableView1RecId: TcxGridDBColumn;
    cxGrid1DBTableView1Feld: TcxGridDBColumn;
    Timer1: TTimer;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form14: TForm14;

implementation

{$R *.dfm}

procedure TForm14.Timer1Timer(Sender: TObject);
Var
  i : Integer;
  s : String;
begin
  s := IntToStr(cxGrid1DBTableView1.Controller.SelectedRowCount)+' rows selected: ';
  for I := 0 to cxGrid1DBTableView1.Controller.SelectedRowCount - 1 do
    s := s + VarToStr(cxGrid1DBTableView1.Controller.SelectedRows[i].Values[0])+', ';

  Label1.Caption := s;
end;

end.
Und die DFM.
Code:
object Form14: TForm14
  Left = 0
  Top = 0
  Caption = 'Form14'
  ClientHeight = 243
  ClientWidth = 527
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 169
    Top = 15
    Width = 31
    Height = 13
    Caption = 'Label1'
  end
  object cxGrid1: TcxGrid
    Left = 146
    Top = 41
    Width = 367
    Height = 200
    TabOrder = 0
    object cxGrid1DBTableView1: TcxGridDBTableView
      NavigatorButtons.ConfirmDelete = False
      DataController.DataSource = DataSource1
      DataController.Summary.DefaultGroupSummaryItems = <>
      DataController.Summary.FooterSummaryItems = <>
      DataController.Summary.SummaryGroups = <>
      OptionsSelection.MultiSelect = True
      object cxGrid1DBTableView1RecId: TcxGridDBColumn
        DataBinding.FieldName = 'RecId'
        Visible = False
      end
      object cxGrid1DBTableView1Feld: TcxGridDBColumn
        DataBinding.FieldName = 'Feld'
      end
    end
    object cxGrid1Level1: TcxGridLevel
      GridView = cxGrid1DBTableView1
    end
  end
  object DataSource1: TDataSource
    DataSet = dxMemData1
    Left = 257
    Top = 126
  end
  object dxMemData1: TdxMemData
    Active = True
    Indexes = <>
    Persistent.Data = {
      5665728FC2F5285C8FFE3F01000000140000000100050046656C640001010000
      0031010100000032010100000033}
    SortOptions = []
    Left = 318
    Top = 107
    object dxMemData1Feld: TStringField
      FieldName = 'Feld'
    end
  end
  object Timer1: TTimer
    Interval = 100
    OnTimer = Timer1Timer
    Left = 267
    Top = 136
  end
end
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#5

AW: cxGrid Anzahl selektierter Datensätze

  Alt 9. Aug 2012, 11:40
Kann ist so bestätigen.

Wenn das cxGrid erst einmal den Focus hatte, dann ist der SelectedRowCount bzw. der SecectedRecordCount immer >= 1.
Da hilft die Property "unselectFocusedRecordOnExit) auch nicht weiter.

Der DevExpress Support ist echt Klasse.
Schau doch mal in die DevExpress Website.
Die Frage kam bestimmt schon mal und wurde sicher auch beantwortet.
Falls nicht, mach kurz ein neues Ticket auf.


Alternativ kannst Du ggf. auch eine TcxCheckbox Column als "unbound column" in den TableView einfügen und den Benutzer die zu selektierenden Datensätze einfach per Checkbox auswählen lassen. Dann muss der User nicht auf den Focus des cxGrids achten ...
  Mit Zitat antworten Zitat
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#6

AW: cxGrid Anzahl selektierter Datensätze

  Alt 9. Aug 2012, 11:44
Nein, vorallem wenn Multiselect, dann muß das nicht so sein.
Hatte das Multiselect nur kurz an um zu testen ob er mehrere richtig anzeigt. Hat er auch gemacht. Nur hab natürlich nicht getestet ob er mit auch "0" richtig anzeigt... Und das macht er tatsächlich..
Wenn ich Multiselect habe funktioniert es anstandslos. Aber eigentlich wollte ich kein Multiselect zulassen.
Aber auf jedenfall schonmal ein Hinweis. Danke


Doch.

Habe ein TdxMemData (drei zeilen mit testdaten), ein Datasource, ein TcxGrid mit einem DBGridTableView und einen Timer.

Beim Start zeigt mir der Timer, das 0 Reihen selektiert sind.
Klicke ich eine Zeile an dann ist N=1 und die selektierte Zeile wird angezeigt, bewege ich den Fokus mit den Cursortasten, bleibt die eins bestehen und ich sehe auch, welche Zeile selektiert ist.

Hier ein hingerotzter Test.
Bei mir war aber von anfang an einer selektiert. Auch ohne das ich vorher auch nur ins Grid geklickt hätte :/
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#7

AW: cxGrid Anzahl selektierter Datensätze

  Alt 9. Aug 2012, 11:59
Na dann wirst Du wohl im Code irgend etwas machen, das eine Zeile selektiert/fokusiert wird, z.B. den Datensatzzeiger des TDatasets bewegen (glaube ich).

Ruf einfach
cxGrid1DBTableView1.Controller.ClearSelection auf.

PS: SelectedRowCount ist immer 1, wenn MultiSelect nicht an ist.

Geändert von Iwo Asnet ( 9. Aug 2012 um 12:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.100 Beiträge
 
Delphi 12 Athens
 
#8

AW: cxGrid Anzahl selektierter Datensätze

  Alt 9. Aug 2012, 12:01
Multiselect an und dann Strg+Linksklick, oder Strg+Leertaste auf einen Selektierten.

Schwups, schon ist der Fokusierte nicht selektiert.


Und ansonsten ist, bei allen Komponenten, auch ohne Multiselect das Fokusierte auch selektiert, wenn es dort etwas wie FocusOnSelect gibt.
DevExpress kann z.B. das bei Rechtsklick nicht so behandeln, womit da eventuell für das Kontextmenü zwar der Fokus umgesetzt wird, aber nicht die Selection.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#9

AW: cxGrid Anzahl selektierter Datensätze

  Alt 9. Aug 2012, 12:03
Multiselect an und dann Strg+Linksklick, oder Strg+Leertaste auf einen Selektierten.

Schwups, schon ist der Fokusierte nicht selektiert.
Boah, sogar das -Schwupps- macht er.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:16 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