Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
DbGrid'de Seçili Satırların Fast Reportta Raporlanması [ÇÖZÜLDÜ]
#1
Arkadaşlar merhaba Programımda Fastreport raporlama programını kullanıyorum. Raporu almamda sorun yok gayet güzel veriler raporlanıyor ancak ben raporlama işlemini kullanıcının seçimine bırakmak istiyorum şöyleki;

   
Resimde görüldüğü üzere kullanıcının dbgridden sadece seçmiş olduğu satırlar raporlansın istiyorum.

   
Fastreportun datasetindeki özelliklerinden resimde görülen ayarı yaptığımda sadece aktif satır raporlanıyor.

   
Fastreportun datasetindeki özelliklerinden resimde görülen ayarı yaptığımda ise dbgridde seçilen satırlarla beraber aralıkta kalan tüm satırlar raporlanıyor yani dbgridde 2,4 ve 6. sıradaki satırları seçince 2 ve 6. satırda dahil 3,5. satırlarda seçili olmasada raporlanıyor.

Ben bu sorunu nasıl halledebilirim yardımlarınızı bekliyorum.
Frxdbdataset verileri fdquery bileşeninden alıyor.
Cevapla
#2
DBGrid de seçilenleri doğrudan raporlamak mümkün olamaz diye düşünüyorum. Şu şekilde yapılabilir DbGrid i Stringride aktararak veya en mantıklısı seçilen kayıt ve DbGrid boyutunda dinamik dizi oluşturup raporlamak. Bir örnek yapıp ekledim. c:\pro_il  olarak yükleyelim.


Ek Dosyalar
.zip   pro_il.zip (Dosya Boyutu: 1,95 MB / İndirme Sayısı: 15)
Cevapla
#3
(11-12-2023, Saat: 00:11)ozturk1987 Adlı Kullanıcıdan Alıntı: DBGrid de seçilenleri doğrudan raporlamak mümkün olamaz diye düşünüyorum.  Şu şekilde yapılabilir DbGrid i Stringride aktararak veya en mantıklısı seçilen kayıt ve DbGrid boyutunda dinamik dizi oluşturup raporlamak. Bir örnek yapıp ekledim. c:\pro_il  olarak yükleyelim.

Değerli kardeşim konuya cevap verdiğin ve örnek proje paylaştığın için teşekkür ederim işimi gördü.
Cevapla
#4
(09-12-2023, Saat: 20:53)bünyamin68 Adlı Kullanıcıdan Alıntı: Arkadaşlar merhaba Programımda Fastreport raporlama programını kullanıyorum. Raporu almamda sorun yok gayet güzel veriler raporlanıyor ancak ben raporlama işlemini kullanıcının seçimine bırakmak istiyorum şöyleki;


Resimde görüldüğü üzere kullanıcının dbgridden sadece seçmiş olduğu satırlar raporlansın istiyorum.


Fastreportun datasetindeki özelliklerinden resimde görülen ayarı yaptığımda sadece aktif satır raporlanıyor.


Fastreportun datasetindeki özelliklerinden resimde görülen ayarı yaptığımda ise dbgridde seçilen satırlarla beraber aralıkta kalan tüm satırlar raporlanıyor yani dbgridde 2,4 ve 6. sıradaki satırları seçince 2 ve 6. satırda dahil 3,5. satırlarda seçili olmasada raporlanıyor.

Ben bu sorunu nasıl halledebilirim yardımlarınızı bekliyorum.
Frxdbdataset verileri fdquery bileşeninden alıyor.
Selamlar,
FastReport'ta bu tür işlemleri yapmak aslında oldukça kolay. Çok esnek bir raporlama gereci.
Bunun için ben bir örnek yaptım, burada dikkat edilmesi gereken noktalar şunlar, 
1- TfrxDBDataset kullanmalı ve raporunu alacağınız tabloyu bunun Dataset özelliğine atamanız gerekiyor.
2- frxDBDataset'in RangeBegin özelliğini rbCurrent yapın.
2- Formunuzda bir sayaç tanımlamalısınız, ben 
  fSelIdx : Integer; 
dedim buna
3-Report'un BeginDoc eventinde tablonuzu sizin seçtiğiniz ilk kayda konumlansın ve fSelIdx := 0 yapsın.

procedure TForm1.frxReport1BeginDoc(Sender: TObject);
begin
  fSelIdx := 0;
  if DBGrid1.SelectedRows.Count>0 then   // Burada hiç satır seçilmiş mi onu kontrol ediyor
    ADODataset1.GotoBookmark(DBGrid1.SelectedRows[0])
  else
    ADODataset1.First;
end;

4- frxDBDataset'in Next event'inde bir tablo kaydını bir sonrakine atlatın
procedure TForm1.frxDBDataset1Next(Sender: TObject);
begin
  fSelIdx := fSelIdx + 1;         // Bir sonraki seçilenin indexi olacak
  if DBGrid1.SelectedRows.Count>0 then        
    if fSelIdx<DBGrid1.SelectedRows.Count then
      ADODataset1.GotoBookmark(DBGrid1.SelectedRows[fSelIdx])
    else
    begin
      ADODataset1.Last;   // Raporun bittiğini ben bu şekilde verdim, başka şekilde sonlanabiliyorsa siz o şekilde de  
      ADODataset1.Next;  // yapabilirsiniz.
    end
  else
    ADODataset1.Next;
end;



Örnek kodlarını buradan alabilirsiniz
Cevapla
#5
(15-12-2023, Saat: 11:43)mustafaozpinar Adlı Kullanıcıdan Alıntı:
(09-12-2023, Saat: 20:53)bünyamin68 Adlı Kullanıcıdan Alıntı: Arkadaşlar merhaba Programımda Fastreport raporlama programını kullanıyorum. Raporu almamda sorun yok gayet güzel veriler raporlanıyor ancak ben raporlama işlemini kullanıcının seçimine bırakmak istiyorum şöyleki;


Resimde görüldüğü üzere kullanıcının dbgridden sadece seçmiş olduğu satırlar raporlansın istiyorum.


Fastreportun datasetindeki özelliklerinden resimde görülen ayarı yaptığımda sadece aktif satır raporlanıyor.


Fastreportun datasetindeki özelliklerinden resimde görülen ayarı yaptığımda ise dbgridde seçilen satırlarla beraber aralıkta kalan tüm satırlar raporlanıyor yani dbgridde 2,4 ve 6. sıradaki satırları seçince 2 ve 6. satırda dahil 3,5. satırlarda seçili olmasada raporlanıyor.

Ben bu sorunu nasıl halledebilirim yardımlarınızı bekliyorum.
Frxdbdataset verileri fdquery bileşeninden alıyor.
Selamlar,
FastReport'ta bu tür işlemleri yapmak aslında oldukça kolay. Çok esnek bir raporlama gereci.
Bunun için ben bir örnek yaptım, burada dikkat edilmesi gereken noktalar şunlar, 
1- TfrxDBDataset kullanmalı ve raporunu alacağınız tabloyu bunun Dataset özelliğine atamanız gerekiyor.
2- frxDBDataset'in RangeBegin özelliğini rbCurrent yapın.
2- Formunuzda bir sayaç tanımlamalısınız, ben 
  fSelIdx : Integer; 
dedim buna
3-Report'un BeginDoc eventinde tablonuzu sizin seçtiğiniz ilk kayda konumlansın ve fSelIdx := 0 yapsın.

procedure TForm1.frxReport1BeginDoc(Sender: TObject);
begin
  fSelIdx := 0;
  if DBGrid1.SelectedRows.Count>0 then   // Burada hiç satır seçilmiş mi onu kontrol ediyor
    ADODataset1.GotoBookmark(DBGrid1.SelectedRows[0])
  else
    ADODataset1.First;
end;

4- frxDBDataset'in Next event'inde bir tablo kaydını bir sonrakine atlatın
procedure TForm1.frxDBDataset1Next(Sender: TObject);
begin
  fSelIdx := fSelIdx + 1;         // Bir sonraki seçilenin indexi olacak
  if DBGrid1.SelectedRows.Count>0 then        
    if fSelIdx<DBGrid1.SelectedRows.Count then
      ADODataset1.GotoBookmark(DBGrid1.SelectedRows[fSelIdx])
    else
    begin
      ADODataset1.Last;   // Raporun bittiğini ben bu şekilde verdim, başka şekilde sonlanabiliyorsa siz o şekilde de  
      ADODataset1.Next;  // yapabilirsiniz.
    end
  else
    ADODataset1.Next;
end;



Örnek kodlarını buradan alabilirsiniz

Sayın Mustafa Hocam çok çok teşekkür ederim bu kod benim için on numara bir kod oldu eline sağlık.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Logo Go3 de döviz tablosunda Date_ alanına veri (Çözüldü) yazma cinarbil 4 258 19-04-2024, Saat: 08:25
Son Yorum: cinarbil
  AdoQuery ile ilgili bir sorun. (Çözüldü) Bay_Y 4 218 17-04-2024, Saat: 10:58
Son Yorum: Bay_Y
  DBGrid Detay Gösterilmesi. OZCANK 19 9.555 05-04-2024, Saat: 00:48
Son Yorum: Pimapen_Nuri
  Fastreport İçindekiler Sayfası Oluşturma [ÇÖZÜLDÜ] bydelphi 1 272 18-03-2024, Saat: 12:11
Son Yorum: bydelphi
  Çok Satırlı Filtreleme [Çözüldü] bünyamin68 12 1.504 14-02-2024, Saat: 22:42
Son Yorum: mustafaozpinar



Konuyu Okuyanlar: 1 Ziyaretçi