C# ve Crystal Report

C# (C Sharp) veya Java ile ilgili konuları buraya yazabilirsiniz.
Cevapla
AliRiza
Üye
Mesajlar: 172
Kayıt: 24 Kas 2004 10:57
Konum: İstanbul/Avcılar
İletişim:

C# ve Crystal Report

Mesaj gönderen AliRiza »

Crystal report kullanarak rapor hazırlıyorum.
Textbox'a girilen değere göre rapor almak istiyorum.
Veri tabanı olarak Sql Server kullanıyorum.Sql serverda 4 adet tablo var.
Po,Poline,Company,Longdescription tabloları.
Bu tabloları dataset'e ekledim.Butonun click olayına aşapıdaki kodu yazdım.

Kod: Tümünü seç

protected void Button1_Click(object sender, EventArgs e) 
    { 
        string isemrino2 = TextBox1.Text; 
         
        SqlConnection baglantim = new SqlConnection("Data Source=***;Database=****;User Id=***;Password=****"); 
        baglantim.Close();   
    string sorgu = "SELECT po.po5,po.description,po.ponum,po.orderdate,po.vendor,po.po3,po.po6,po.totalcost,companies.phone,companies.address1,longdescription.ldtext from po LEFT OUTER JOIN poline ON po.ponum=poline.ponum LEFT OUTER JOIN companies ON po.vendor =companies.company  LEFT OUTER JOIN longdescription ON po.ldkey=longdescription.ldkey   where po.ponum =@satinalmano"; 
       
    SqlCommand cmd = new SqlCommand(sorgu,baglantim); 
        SqlParameter param = new SqlParameter(); 
        baglantim.Open(); 
     
    param.ParameterName = "@satinalmano"; 
    param.Value = TextBox1.Text; 
    cmd.Parameters.Add(param); 
    cmd.ExecuteNonQuery(); 
     
     
    SqlDataAdapter deneme = new SqlDataAdapter(sorgu,baglantim); 

    deneme.SelectCommand.Parameters.AddWithValue("@satinalmano", TextBox1.Text); 
    DataSet ds = new DataSet(); 
  deneme.Fill(ds); 
  foreach (DataRow row in ds.Tables[0].Rows) 
  { 

       

      Label1.Text= row["po3"].ToString(); 

       
  } 


  string firmalar = "SELECT address1 from companies where company=@firma2"; 
  SqlCommand cmd2 = new SqlCommand(firmalar,baglantim); 
  SqlParameter param2 = new SqlParameter(); 
  param2.ParameterName = "@firma2"; 
  param2.Value = Label1.Text; 
  cmd2.Parameters.Add(param2); 
  cmd2.ExecuteNonQuery(); 
  SqlDataAdapter deneme2 = new SqlDataAdapter(firmalar, baglantim); 
  deneme2.SelectCommand.Parameters.AddWithValue("@firma2",Label1.Text); 
  DataSet ds2 = new DataSet(); 
  deneme2.Fill(ds2); 
  //Ürünler veritabanından çekiliyor 
  string urunler = "SELECT description,storeloc,itemnum,orderqty,orderunit,unitcost,plin1,plin2 from poline  where ponum=@satinalmano2"; 
  SqlCommand cmd3 = new SqlCommand(urunler, baglantim); 
  SqlParameter param3 = new SqlParameter(); 
  param3.ParameterName = "@satinalmano2"; 
  param3.Value = TextBox1.Text; 
  cmd3.Parameters.Add(param3); 
  cmd3.ExecuteScalar(); 
  SqlDataAdapter deneme3 = new SqlDataAdapter(urunler, baglantim); 
  deneme3.SelectCommand.Parameters.AddWithValue("@satinalmano2",TextBox1.Text); 
  DataSet ds3 = new DataSet(); 
  deneme3.Fill(ds3); 
   
    ReportDocument rp = new ReportDocument(); 
  rp.Load(Server.MapPath("CrystalReport1.rpt")); 
   
  rp.SetDataSource(ds);     
  rp.Database.Tables["po"].SetDataSource(ds.Tables[0]); 
  rp.Database.Tables["longdescription"].SetDataSource(ds.Tables[0]); 
  rp.Database.Tables["companies"].SetDataSource(ds2.Tables[0]); 
  rp.Database.Tables["poline"].SetDataSource(ds3.Tables["0"]); 
   
   
     
  CrystalReportViewer1.ReportSource = rp; 
  CrystalReportViewer1.Visible = true; 

    baglantim.Close(); 
       
     } 
   
} 
Kodları açıklayacak olursam ilk sorguda birbiriyle ilişkili olan tablodaki select ile belirtilmiş veriler çekiliyor.Bunda sorun yok.
2)2. sorguda bu sorgudan gelen firma bilgisine göre adres bilgisi gibi bilgileri çekmek istiyorum.
2. Sorgu

string firmalar = "SELECT address1 from companies where company=@firma2";
Crystal report dizaynda company tablosundan istediğim alana adres field'ini yerleştirdim.Ama po tablosundan 3 adet firma var ve asp'de bunu aşağıdaki şekilde yapmıştım.c#'de nasıl yaparım.crystal reportdaki adres alanına 3 adet firmanın varsa bilgilerini nasıl gönderirim ??..

Asp'de recordsetten

Kod: Tümünü seç

firma1=rs("vendor") 
firma2=rs("po3") 
firma3=rs("po6") 
toplamfiyatf1=rs("totalcost") 
telefon(a)=rs("phone") 
fadres=rs("address1") 
detayli_aciklama=rs("ldtext") 
rs.movenext 
loop 
if firma2<>"" or firma3<>"" then 
if firma2<>"" then 
set firmalar=Baglantim.execute("SELECT address1 from companies where company='"& firma2 &"'") 
end if 
if firma3<>"" then   
set firmalar2=Baglantim.execute("SELECT address1 from companies where company='"& firma3 &"'") 
end if 
En üstteki c# kodlarında 3. sorguda da yine textboxda girilen'e göre teklif alınan birden fazla ürün bilgisini çekiyorum.Veriler gelmiyor..
2)Sqldatareader kullansam dataları nasıl crystal reportda raporlayabilirim ? Datareaderdan crystal reportda döngü içindeki tüm verileri göndermem gerekiyor...

Kod: Tümünü seç

SqlDataReader drurunler;
  drurunler = squrunler.ExecuteReader();
  while(drurunler.Read())
    {
        string urunler=drurunler.GetString(0);
    }
3)Raporlamayı yaptıktan sonra crystal report'un print butonuna basınca tüm veriler siliniyor.Onload olayına aynı kodları yazdım.Aynı sorun devam ediyor.Export veya printde veriler gelmiyor.Sebebi nedir?Ne yapmam gerekir?

3 sorumla ilgili olarak yardımlarınızı bekliyorum..
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: C# ve Crystal Report

Mesaj gönderen unicorn64 »

Hocam off topic olacak ama imzanızdaki yazı dikkatimi çekti.
Hz. Ali nin söylediği sözde kulu olmak ifadesi geçiyor ama sözün orjinalinde bu yok.
"Bana bir harf öğretenin 40 yıl kölesi olurum" şeklinde olması gerek...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
iltermutlu
Üye
Mesajlar: 1
Kayıt: 02 Ağu 2010 02:12

Re: C# ve Crystal Report

Mesaj gönderen iltermutlu »

aradığımı buldum teşekkürler :)
deneme.SelectCommand.Parameters.AddWithValue("@satinalmano", TextBox1.Text);
Cevapla