cxgrid'de secili kayitlari yakalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

cxgrid'de secili kayitlari yakalama

Mesaj gönderen fahrettin »

cxGrid'de multiselection true yapilip Ctrl ile mouse tusuna basarak sectigim kayitlarin hangileri oldugunu nasil alabilirim? Bunlar bir selected list'te filan mı duruyor? Yoksa kayılar uzerinde gezip selected gibi bir flag mi kontrol edilecek acaba?

Kolay gelsin....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Kod: Tümünü seç

with tvUsers.DataController do
  begin
    if not IsGridMode then
    begin
      ShowMessage('Grid mode is disabled');
      Exit;
    end;


    BeginUpdate;
    try
      for I := 0 to GetSelectedCount - 1 do
      begin
        //Grid mode
        DataSet.Bookmark := GetSelectedBookmark(I);
        AEmail := DataSet.FieldValues['EMail'];

        SendEmail(AEmail, ASubject, ATextToSend);
      end;
    finally
      EndUpdate;
    end;
Kolay gele kuzen
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

S.A. Fahrettin abi,
Freeman hocama ek olarak , belki de aynı şeydir. Ama ben bir örnek ile karşılaşmıştım. Bu örnekte;
Demos klasöründe sanırım dediğin ile ilgili bir örnek var . (CellLevelMultiselectDemo isimli klasörde).

Burada; shift tuşuna basılı tutarak, excelde ki gibi , hücreleri seçiliyor ve ctrl+c ile kopyalanıp, excel içine yapıştırılabiliyor .

Kod: Tümünü seç

unit [b]CellLevelMultiselectDemoMain[/b];
{$I ..\..\cxDemos.inc}
interface
uses
  Windows, Forms, Messages, SysUtils, Classes, ActnList, ImgList, Controls, Menus, StdCtrls,
  cxButtons, cxCheckBox, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxSpinEdit, ExtCtrls,
  cxGridLevel, cxGridCustomTableView, cxGridCardView, cxGridDBCardView, cxClasses, cxControls,
  cxGridCustomView, cxGrid, ComCtrls, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, DB,
  cxDBData, cxDataStorage, cxLookAndFeelPainters, cxLookAndFeels, cxHyperLinkEdit, cxImageComboBox,
  cxDBLookupComboBox, cxMemo, cxGridTableView;
type
  TCellLevelMultiselectDemoMainForm = class(TForm)
    mmMain: TMainMenu;    miAbout: TMenuItem;    miFile: TMenuItem;    miExit: TMenuItem;
    sbMain: TStatusBar;    lbDescrip: TLabel;
    LookAndFeelController: TcxLookAndFeelController;
    Panel1: TPanel;    Label1: TLabel;    Label2: TLabel;    Label3: TLabel;    Label4: TLabel;
    lblSelectedRows: TLabel;    lblSelectedColumns: TLabel;    lblSelectedCells: TLabel;    lblSelectedSummary: TLabel;
    cxStyleRepository1: TcxStyleRepository;
    styleSelected: TcxStyle;
    styleNormal: TcxStyle;
    Grid: TcxGrid;
    TableView: TcxGridTableView;
    Level: TcxGridLevel;
    procedure miAboutClick(Sender: TObject);
    procedure miExitClick(Sender: TObject);
    procedure TableViewSelectionChanged(Sender: TcxCustomGridTableView);
    procedure TableViewCustomDrawIndicatorCell(Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
    procedure TableViewStylesGetHeaderStyle(Sender: TcxGridTableView; AColumn: TcxGridColumn; out AStyle: TcxStyle);
    procedure TableViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  private
    FAnchorLinkedAreaLastColumn: TcxGridColumn;
    procedure CreateSpreadSheet;
    procedure CreateColumns;
    procedure CreateRows;
    function GetColumnCaption(Index: Integer): string;
    procedure SetColumnsSelected(AFromColumn, AToColumn: TcxGridColumn; ASelected: Boolean);
  public
    constructor Create(AOwner: TComponent); override;
  end;
var
  CellLevelMultiselectDemoMainForm: TCellLevelMultiselectDemoMainForm;
implementation
{$R *.dfm}

uses
{$IFDEF DELPHI6}
  Variants,
{$ENDIF}
  Dialogs, AboutDemoForm, cxVariants;

const
  RecordCount = 500;
  ColumnCount = 256;
  
constructor TCellLevelMultiselectDemoMainForm.Create(AOwner: TComponent);
begin  // Gridde (1,5) kolonları ve (2,12) satırları arasında ki hücreleri seçili hale getiriyor
  inherited Create(AOwner);
  CreateSpreadSheet;
  TableView.Controller.SelectCells(
    TableView.Columns[1], TableView.Columns[5], 2, 12);
end;

procedure TCellLevelMultiselectDemoMainForm.miAboutClick(Sender: TObject);
begin
  ShowAboutDemoForm;
end;
procedure TCellLevelMultiselectDemoMainForm.miExitClick(Sender: TObject);
begin
  Close;
end;

procedure TCellLevelMultiselectDemoMainForm.TableViewSelectionChanged(
  Sender: TcxCustomGridTableView);

  function SelectedRowCount: Integer;
  begin
    Result := TableView.Controller.SelectedRowCount;
  end;

  function SelectedColumnCount: Integer;
  begin
    Result := TableView.Controller.SelectedColumnCount;
  end;

  function GetSummOfSelection: Integer;
  var
    I, J: Integer;
    val: Variant;
  begin
    Result := 0;
    for I := 0 to SelectedRowCount - 1 do
      for J := 0 to SelectedColumnCount - 1 do
      begin
        val := TableView.DataController.GetValue(
          TableView.Controller.SelectedRows[I].RecordIndex,
          TableView.Controller.SelectedColumns[J].Index);
        if not VarIsNull(val) then
          Inc(Result,  Integer(val));
      end;
  end;

begin
  lblSelectedRows.Caption :=
    FloatToStrF(SelectedRowCount, ffNumber, 15, 0);
  lblSelectedColumns.Caption  :=
    FloatToStrF(SelectedColumnCount, ffNumber, 15, 0);
  lblSelectedCells.Caption  :=
    FloatToStrF(SelectedRowCount * SelectedColumnCount, ffNumber, 15, 0);
  lblSelectedSummary.Caption := FloatToStrF(GetSummOfSelection, ffNumber, 15, 0);
end;

procedure TCellLevelMultiselectDemoMainForm.TableViewCustomDrawIndicatorCell(
  Sender: TcxGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
var
  AIndicatorViewInfo: TcxGridIndicatorRowItemViewInfo;
  ATextRect: TRect;
  AStyle: TcxStyle;
begin
  if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
    Exit;
  ATextRect := AViewInfo.ContentBounds;
  AIndicatorViewInfo := AViewInfo as TcxGridIndicatorRowItemViewInfo;
  InflateRect(ATextRect, -2, -1);
  if AIndicatorViewInfo.GridRecord.Selected then
    AStyle := styleSelected
  else
    AStyle := styleNormal;
  Sender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.ContentBounds,
    ATextRect, [], cxBordersAll, cxbsNormal, taCenter, vaCenter,
    False, False, IntToStr(AIndicatorViewInfo.GridRecord.Index + 1),
    AStyle.Font, AStyle.TextColor, AStyle.Color);
  ADone := True;
end;

procedure TCellLevelMultiselectDemoMainForm.TableViewStylesGetHeaderStyle(
  Sender: TcxGridTableView; AColumn: TcxGridColumn; out AStyle: TcxStyle);
begin
  if AColumn = nil
    then exit;
  if AColumn.Selected then
    AStyle := styleSelected
  else
    AStyle := styleNormal;
end;

procedure TCellLevelMultiselectDemoMainForm.CreateSpreadSheet;
begin
  TableView.BeginUpdate;
  try
    CreateColumns;
    CreateRows;
  finally
    TableView.EndUpdate;
  end;
end;

procedure TCellLevelMultiselectDemoMainForm.CreateColumns;
var
  I: Integer;
  AColumn: TcxGridColumn;
begin
  for I := 0 to ColumnCount - 1 do
  begin
    AColumn := TableView.CreateColumn;
    AColumn.Caption := GetColumnCaption(I);
    AColumn.HeaderAlignmentHorz := taCenter;
    AColumn.DataBinding.ValueType := 'Integer';
  end;
end;

procedure TCellLevelMultiselectDemoMainForm.CreateRows;
var
  I, J: Integer;
begin
  TableView.DataController.RecordCount := RecordCount;
  Randomize;
  for I := 0 to RecordCount - 1 do
    for J := 0 to ColumnCount - 1 do
      TableView.DataController.SetValue(I, J, Random(100));
end;

function TCellLevelMultiselectDemoMainForm.GetColumnCaption(Index: Integer): string;
const
  AlphabetSymbolCount = Integer('Z') - Integer('A') + 1;
begin
  if Index div AlphabetSymbolCount > 0 then
     Result := GetColumnCaption(Index div AlphabetSymbolCount - 1)
  else Result := '';
  Result := Result + char(Integer('A') + Index mod AlphabetSymbolCount);
end;

procedure TCellLevelMultiselectDemoMainForm.SetColumnsSelected(
  AFromColumn, AToColumn: TcxGridColumn; ASelected: Boolean);
var
  I: Integer;
  AFromColIndex, AToColIndex: Integer;
begin
  AFromColIndex := AFromColumn.VisibleIndex;
  AToColIndex := AToColumn.VisibleIndex;
  if AFromColIndex > AToColIndex then
  begin
    I := AToColIndex;
    AToColIndex := AFromColIndex;
    AFromColIndex := I;
  end;
  TableView.BeginUpdate;
  try
    for I := AFromColIndex to AToColIndex do
      TableView.VisibleColumns[I].Selected := ASelected;
  finally
    TableView.EndUpdate;
  end;
end;

procedure TCellLevelMultiselectDemoMainForm.TableViewMouseDown(
  Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
var
  AHitTest: TcxCustomGridHitTest;
  AColumn: TcxGridColumn;
begin
  AHitTest := TableView.GetHitTest(X, Y);
  if not (AHitTest is TcxGridColumnHeaderHitTest) then
    Exit;
  AColumn := (AHitTest as TcxGridColumnHeaderHitTest).Column;
  TableView.BeginUpdate;
  try
    if ssShift in Shift then
    begin
      SetColumnsSelected(TableView.Controller.CellSelectionAnchor,
        FAnchorLinkedAreaLastColumn, False);
      SetColumnsSelected(TableView.Controller.CellSelectionAnchor, AColumn, True);
    end
    else
    begin
      if ssCtrl in Shift then
        AColumn.Selected := True
      else
        TableView.Controller.SelectColumns(AColumn, AColumn);
      AColumn.Focused := True;
      TableView.Controller.CellSelectionAnchor := AColumn;
    end;
    TableView.DataController.SelectAll;
    FAnchorLinkedAreaLastColumn := AColumn;
  finally
    TableView.EndUpdate;
  end;
end;

Saygılar  :D 

end.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Oğuz hocam bu Quantum Grid 5 ile gelen bir özellik. QG4'te çalışmaz.

Kolay gelsin.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

eyvallah kuzen kod işimi gordu.....

Sağolasın....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
Ademkoysuren
Üye
Mesajlar: 83
Kayıt: 26 Ağu 2003 03:07
Konum: KIRŞEHİR
İletişim:

Mesaj gönderen Ademkoysuren »

freeman35 arkadaşımın vediği kodu uyguladım ama önüme şöyle bir hata çıktı
DataController not in Gridmode

sorun neden olabilir
Cemre Bilgisayar Yazılım
KIRŞEHİR
MANDRAKE
Üye
Mesajlar: 72
Kayıt: 26 Haz 2005 08:42

Mesaj gönderen MANDRAKE »

bu cxgridi nasıl temin edebiliriz hocam ben çok aradım ama bulamadım kusura bakmayınm yeri değil belki burası ama:(
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

http://www.devexpress.com
paralı olarak satılmaktadır. demosuda vardı sanırım.
turkcanfidan
Üye
Mesajlar: 380
Kayıt: 31 Eki 2005 03:26

Mesaj gönderen turkcanfidan »

MANDRAKE yazdı:bu cxgridi nasıl temin edebiliriz hocam ben çok aradım ama bulamadım kusura bakmayınm yeri değil belki burası ama:(
bunu oku

viewtopic.php?t=14353
MANDRAKE
Üye
Mesajlar: 72
Kayıt: 26 Haz 2005 08:42

Mesaj gönderen MANDRAKE »

turkcanfidan yazdı:
MANDRAKE yazdı:bu cxgridi nasıl temin edebiliriz hocam ben çok aradım ama bulamadım kusura bakmayınm yeri değil belki burası ama:(
bunu oku

viewtopic.php?t=14353
teşekkürler dostum. ben bir iki tane indirdim ama setup olayı yok baya bi folder çıkıyo içinden delphiye bunu nasıl entegre ediyoruz anlayamadım??
turkcanfidan
Üye
Mesajlar: 380
Kayıt: 31 Eki 2005 03:26

Mesaj gönderen turkcanfidan »

Ana dizin içinde "How to Install" dosyasında anlatıyor. adım adım uygularsan becerebilirsin. BAT dosyalarının içindeki dizin yapısı ile seninkinin uymasına dikkat et.
MANDRAKE
Üye
Mesajlar: 72
Kayıt: 26 Haz 2005 08:42

Mesaj gönderen MANDRAKE »

teşekkürler bi bakayım bat dosyası varmı uygulamaya çalışayım
Cevapla