Müdavim Girişi

E-Posta
Parola

Ücretsiz Kayıt Ol


Online Müdavimler (1 Kişi)

Yazar Hakkında
x
İsmail Kocacan
İsmail Kocacan is experienced on many development platforms and continues to learn technologies. Since the age of 16-17, dealing with software technologies. And continuous learning, teaching, research, continues to develop.
CxGridin Satırlarına Buton Eklemek

Merhaba arkadaşlar;

Bu makalede sizlere  DevExpress’in cxGridini satırlarına nasıl button ekleyebiliriz.Bunu göstericem.Hafta sonu üstad Kemal abimizden biraz development dersi aldıktan sonra ,biraz da uğraşınca birşeyler öğrendik.

 

Başlıyoruz…
Bu  uygulama için Nortwind veritabanındaki Categories(Master) ve Products(Detail) tablolarını kullanıcaz.Bilindiği üzere Products tablosunun CategoryID kolonu ile Categories tablosunun CategoryID kolonu birbirleri ile “Bire- Çok “ ilişkilidir.

 

Delphi XE ve SQL Server 2008 R2 üzerinde çalışıyoruz…

Öncelikle yeni açtığımız projeye bir adet DataModule nesnesi ekleyerek başlayalım.

DataModule nesnesi içersine Ado nesnelerini yerleştiriniz.
Daha sonra bu nesneleri birbirleri ile haşır neşir ediniz.


Nesneleri birbirleri ile haşır neşir edip, bağlantı sağlandıktan sonra form bir adet cxGrid ekleyin.Ve gridi datamodule içersindeki dsProducts verikaynağına bağlayınız.

 

Designer açıkken cxGrid1DBTableView1CategoryID kolonu seçiliyken Object Inspector ‘ dan  Kolonunun lookUp ayarlarını yapalım.

Buraya kadar LookUp işlemini yaptık.Çalıştırdığımızda aşağıdaki bir sonuç alacağız.


Şimdi gelelim asıl yapmak istediğimize…

CategoryID kolonunda bir LookUpComboBox’ ımız var.Şimdi LookUpComboBox’ın yanına istediğimiz kadar buton ekleyip,hangisine basıldığını tespit edicez.

Önce hemen şunu  yapıyoruz. Designer açıkken cxGrid1DBTableView1CategoryID kolonunun diğer özelliklerine eventlarına filan bakıyoruz. cxGrid1DBTableView1CategoryID kolonu lookUpComBoya  dönüştüğü için lookUpComBo özellikleri,event’ları geliyor.Bizim işimiz de onlarla değil.

 

Tam bu esnada “Hay anasını satiyim.” Deyip bir hayal kırıklığının ardından…

Sanırım cxGridi tasarlayanlar button koleksiyonunu published kısmına yazmamış herhalde.Eğer published kısmına yazsaydı. Ozaman Object Inspector’ da da görürdük diye düşünüyoruz.Ve hemen ardından.
Biraz da kod tarafından bakıyoruz Olaya. Ve nihayetinde olayın varıyoruz farkına.


Yukarıdaki görüntüden şöyle bir anlam çıkarıyoruz ve kendi kendimize mırıldanıyoruz.Hımm. CategoryID kolonu ,özellikleri ,butonları… butonlarımı ?
Demekki bir kolonda bir den fazla buton olabilir.Tekrar hımm’lamamıza kaldığımız yerden devam ediyoruz.


Button koleksiyonuna buton ekleyen ve eklediği butonu geri dönen bir Add fonksiyonu var.Kodumuzu aşağıdaki gibi düzenleyip bir daha deh diyoruz.





Evet butonu eklemeyi başardık nihayetinde… İstersek eklediğimiz buton resim bile koyabiliriz.
Şimdi şunu düşüyoruz. İstediğimiz kadar buton ekleyebiliyoruz.Hangisine basıldığını nasıl tespit edip işlem yaptırabiliriz.İyide düşünürken bile şunu diyoruz.Hangisine basıldığını anda…


İncelerken OnButtonClick  event’inin olduğunu görüyoruz.Ve sol taraftaki hint’ de de bu event tetiklendiğinde de nasıl bir prosedürü çalıştırabilir onu görüyoruz.Prosedürün ismi önemli değil.Ama parametreleri (Sender:Tobject;AbuttonIndex:Integer) şeklinde olmalı.

Evet artık olayı çözmüş bulunuyoruz.Kodun son hali aşağıdaki olmalı.

 

unit umain;

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,

  cxStyles, dxSkinsCore, dxSkinscxPCPainter, cxCustomData, cxFilter, cxData,

  cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel, cxClasses, cxGridCustomView,

  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,

  cxDBLookupComboBox;

 

type

  TfrmMain = class(TForm)

    cxGrid1DBTableView1: TcxGridDBTableView;

    cxGrid1Level1: TcxGridLevel;

    cxGrid1: TcxGrid;

    cxGrid1DBTableView1ProductID: TcxGridDBColumn;

    cxGrid1DBTableView1ProductName: TcxGridDBColumn;

    cxGrid1DBTableView1SupplierID: TcxGridDBColumn;

    cxGrid1DBTableView1CategoryID: TcxGridDBColumn;

    cxGrid1DBTableView1QuantityPerUnit: TcxGridDBColumn;

    cxGrid1DBTableView1UnitPrice: TcxGridDBColumn;

    cxGrid1DBTableView1UnitsInStock: TcxGridDBColumn;

    cxGrid1DBTableView1UnitsOnOrder: TcxGridDBColumn;

    cxGrid1DBTableView1ReorderLevel: TcxGridDBColumn;

    cxGrid1DBTableView1Discontinued: TcxGridDBColumn;

    procedure FormCreate(Sender: TObject);

  private

    //Event'in çağıracağı prosedür

    procedure Tiklanani_Bi_Bulursam(Sender: TObject; AButtonIndex: Integer);

  public

  end;

 

var

  frmMain: TfrmMain;

 

implementation

 

uses udm;

{$R *.dfm}

 

procedure TfrmMain.FormCreate(Sender: TObject);

var

  btn: TcxEditButton;

begin

  btn := cxGrid1DBTableView1CategoryID.Properties.Buttons.Add;

  btn.Kind := bkEllipsis;

 

  btn := cxGrid1DBTableView1CategoryID.Properties.Buttons.Add;

  btn.Kind := bkEllipsis;

 

  cxGrid1DBTableView1CategoryID.Properties.OnButtonClick :=

    Tiklanani_Bi_Bulursam;

end;

 

procedure TfrmMain.Tiklanani_Bi_Bulursam(Sender: TObject;

  AButtonIndex: Integer);

begin

  // ShowMessage(IntToStr(AButtonIndex));

  case AButtonIndex of

    0:ShowMessage('lookup butonuna tıkladın');

    1:ShowMessage('2.butona tıkladın');

    2:ShowMessage('3.butona tıkladın');

  end;

end;

end.



Bana delphinin inceleliklerini öğreten Kemal abime teşekkür ederim.

Umarız faydalı olmuşuzdur.
Kaynak Kodları buradan indirebilirsiniz.

 

İsmail Kocacan(Yazılımcı Bozuntusu)
ismailkocacan@gmail.com


Kategori : Delphi | 12.10.2011 14:09:00  | 213 defa okundu  | 0 Yorum |

Yazara Ait Diğer Makaleler(49) Makaleye Yapılan Yorumlar İlk yorum yazan siz olun
Ara
 
Anket
Hangi VeriTabanı Yönetim Sistemini Kullanıyorsunuz ?