Mega Code Archive

 
Categories / Delphi / Examples
 

Neoturk forum - dbgrid sıralama

" 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_