"
11 Aralık 2005 02:12
dbgrid sıralama
arkadaşlar DBGridde alfabetik sıralama nasıl yapılır.yeni kayıt
girildiğinde en sona atıyor.A-Z olarak düzgün bir sıralama yapmam lazım.
Table olarak Adotable kullanıyorum..
bi sorum daha olacaktı arkadaşalar..
recordcount dbgridin satırsayısını verir.benim amacım DBgiriddeki bir
sutunun recordcountunu almak istiyorum.yani satırsayısından ziyade
(boş satırlarıda görüyor çünkü)dolu satırların sayısını almam..
arkadaşlar örnekte olduğu gibi sütunda 6 satır ama 3 kayıt var.
_______ ben labele 3 yazdırmak istiyorum.anlaşılmıştır umarım sağolun
_______]1
_______]2
_osman_]3
_kazım_]4
_______]5
_ali___]6
frantic00
"
*******************************
11 Aralık 2005 17:34
Adotable1.Sort := 'ADI ASC';
asc aslında default değerdir. Tersini yapma istersen desc kullanman gerekir.
İkinci soru için bir döngü kurman gerekir null olmayan satırları say gibi.
Kolay gelsin
asedizer
********************************
cevap:
asedizer arkadaşımıza teşekkürler, verdiği kodlama ve açıklaması doğrudur.
bu kodu biraz daha açmak istiyorum,
dbgrid üzerinde tıklanılan alana göre sıralama yaptırmak istersek;
( hep de bu soru soruluyordu şimdi cevap veriyorum topluca )
dbgridin ilgili click olayına ( tek-çift click,columclick, seçim sizin )
aşağıdaki kodu yazınız,
//written by neoturk - 2005
var m:integer;
begin
m:=dbgrid1.Columns.Grid.SelectedField.Index; //seçili olan field saha numarası
adotable1.sort:=dbgrid1.Columns[m].FieldName;//tıklanan kolondaki field sahasına göre sırala
//final
end;
bu yöntemi kendi programlarımda kullanıyorum.
sizler de kullanın.
ikinci sorunuza gelecek olur isek,
_______]1
_______]2
_osman_]3
_kazım_]4
_______]5
_ali___]6
böyle bir yapıda olan dbgridinizdeki 6 kayıt içersindeki görünen 3 adet
kaydın sayısını label içerisine aktarmak istiyorsunuz ?...
( toplamda 6 kayıt var, ama label içerisine 3 yazacak )
okey,
( teorik yazıyorum, syntax hatam olursa düzeltin )
peki, şık bir kod olsun...
button1 onclick olayına aşağıdaki kodu yaz:
//written by neoturk - 2005
var toplam:integer;
function say(sahaadi:string;tur:byte):integer;
var x:string;t:integer;
//tur=1 olursa dolu kayıt sayısını saysın
//tur=0 olursa boş kayıt sayısını saysın
begin
t:=0;//kayıt sayacı
adotable1.first;
while not(adotable1.eof) do
begin
x:=trim(adotable1.fieldbyname(sahaadi).astring);//ilgili field hücre içeriği
case tur of
0:if x='' then inc(t);//boş kayıt sayısı değerini +1 artır
1:if x<>'' then inc(t);//dolu kayıt sayısı değerini +1 artır
end;//case
adotable1.next;//sonraki kayda git
end;
result:=t;
//final
end;
//buttonun ana begini
begin
//ADSOYAD hanesine göre sorgulama yap
toplam:=say('ADSOYAD',1);label1.caption:='İçi dolu kayıt sayısı = '+inttostr(toplam);
toplam:=say('ADSOYAD',0);label2.caption:='İçi boş kayıt sayısı = '+inttostr(toplam);
//TELEFON hanesine göre sorgulama yap
//toplam:=say('TELEFON',1);label1.caption:='İçi dolu kayıt sayısı = '+inttostr(toplam);
//toplam:=say('TELEFON',0);label2.caption:='İçi boş kayıt sayısı = '+inttostr(toplam);
//final
end;
not-1: tablodaki aktif satırın yeri her defasında son kayda konumlanacaktır.
bunu da engelleyebilirdik, yerini ve istifini bozdurtmayabilirdik,
ama zamanım yok şu anda.
not-2: sorgulanacak field alanlarının içeriğini .asstring olarak algılattım.
buna dikkat edin. sayısal field içerikleri için hata verebilir. bunun için
biraz daha incelik ve detay kodlama gerektiriyor.
( functiona bir parametre daha ekletip saha türünün string mi sayısal mı
olduğunu peşin-peşin belirtip ona göre normal trim(stringler için)
ya da içi 0 mı değil mi mantığı ile çözümleyebilirdik.
sonuç olarak, yukarıdaki kod parçası, sadece string türü içeren field sahaları
için sorunsuz çalışmasını bekliyorum.
kodu teorik olarak yazdım. şimdilik bir hata görünmüyor.
bunu deneyin, ve kendinize göre geliştirin.
sanırım istediğiniz buydu.
saygılarımla_
neoturk_