DbGridde başlığa göre artan veya azalan sıralama (Ado için)

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

DbGridde başlığa göre artan veya azalan sıralama (Ado için)

Mesaj gönderen sadettinpolat »

Ado kullanarak yaptığımız bir programda; kullanıcı, verileri gösterdiğimiz dbgridin başlığına tıkladığı zaman tıklanan başlığa göre kayıtları artan veya azalan şekilde nasıl sıralarız.

1- İlk önce göze hoş gelsin diye kullanıcı fareyi gridin başlıkları üzerine getirdiği zaman imleci crHandPoint haline getirelim.

Kod: Tümünü seç

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  pt: TGridcoord;
begin
  pt:= DBGrid1.MouseCoord(x, y);

  if pt.y=0 then
    DBGrid1.Cursor:=crHandPoint
  else
    DBGrid1.Cursor:=crDefault;
end;

2- Kullanıcı başlıklara tıkladığı zaman tıklanan başlığın fontunu bold yapalım ve tıklama sırasına göre kayıtları artan veya azalan şekilde sıralayalım.

Kod: Tümünü seç

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
 const PreviousColumnIndex : integer = -1;
{$J-}
begin

  if DBGrid1.DataSource.DataSet is TCustomADODataSet then
  with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
  begin
    try
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
    except
    end;

    Column.title.Font.Style :=
    Column.title.Font.Style + [fsBold];
    PreviousColumnIndex := Column.Index;

    if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
      Sort := Column.Field.FieldName + ' DESC'
    else
      Sort := Column.Field.FieldName + ' ASC';
  end;
end;
dikkat edilmesi gereken husus:
1- Bu kod sadece Ado için geçerlidir diğer bileşenler için düzenlenmesi gerekebilir.
2- Program delphiden çalıştırıldığı zaman ilk kez çalışacak Titleclick olayında List index out of bounds(-1) hatası meydana gelecek. Sakın kod çalışmıyor diye kendinizi boşa yormayın.
PreviousColumnIndex değişkeni olay ilk kez tetiklendiğinde -1 değerine sahip olduğu için bu hata meydana geliyor. Try except, bu hatayı kullanıcıdan gizliyor...

http://delphi.about.com/library/weekly/aa042203a.htm
mertcenk
Üye
Mesajlar: 71
Kayıt: 03 Tem 2003 05:46

top grid için uyarlama

Mesaj gönderen mertcenk »

Bu konuyu topgrid e uyarlamaya calistim...Top gridde ontitleclick olayı yok...bende onheadingclick olayına yazmaya calistim...

onmousemove olayı çalışlırken....dbgrid için otitleclick e yacacağımız kodlarda

if TsDBGrid1.DataSource.DataSet is TCustomADODataSet then

satırında TCustomADODataSet ' de hata verdi...

çünkü ado nesnelerim bu formun üstünde değil...Datamodüle içinde tanımlı bütün ADO nesnelerim... dolayısı ile Tcustomadodataset olmadı...Datamodule içinde nasıl çağırabiliriz nesneleri..

bunu nasıl yapacağımı bulamadım..

Bu konuda yardımcı olabilecek arkadas varsa memnun olacağım...bu şekilde çalışan arkadaşlarada kaynak olur..ornek bir çalışma olur
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

datamodule geçin ve TADODataSet sinifinin üzerine ctrl tuşu basılı iken fareyle tıklayın. bu sayede bu sunıfın deklare edilmiş olduğu unite gideceksiniz. TCustomADODataSet kelimesini kullandığğınız formun uses satırına bu unit adını ekleyin

yani kısaca TCustomADODataSet hangi unitte tanımlanmışsa ilgili formun uses satırına bu uniti eklemeniz gerekir.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
mertcenk
Üye
Mesajlar: 71
Kayıt: 03 Tem 2003 05:46

bi kaç hata daha

Mesaj gönderen mertcenk »

tamam orayı bu msg yi yazdıktan sonra hallettim..ama şoyle sorunlar var..

topgridde column özelliği yok mesela...

topgrid kullandınızmı hiç ?

bu kodları topgride uyarlayabilirmiyizz...
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

topgrid malesef hiç kullanmadım...
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla