Projemizde veritabanına yer vermediğimiz için datagrid nesnesine atılabilcek demo sınıf veri olusturalım. Demo sınıf için bir class olusturup aşağıdakı kodları yazalım;
class alet
{
public string aletadi { get; set; }
public string aletbarkod { get; set; }public bool durum { get; set; }
}
MainWindow.xaml.cs 'nin içinde demo verileri yukleyelim.
private List<alet> LoadGrid()
{List<alet> users = new List<alet>();
users.Add(new alet()
{
aletadi="makas",
aletbarkod="3FD54",
durum = false
});
users.Add(new alet()
{
aletadi = "portegü",
{
aletadi = "portegü",
aletbarkod = "GD65SE",
durum = true
});
users.Add(new alet()
{
aletadi="klemp",
aletbarkod="SAR45",
durum = true
});
users.Add(new alet()
{
aletadi = "levye",
aletbarkod = "ABCF76",
durum = true
});
return users;
}
Formun Load olayında datagridin itemsource'una verilerimizi yükleyelim.
dataGrid1.ItemsSource = LoadGrid();
Projemize CyrstalReport1.rpt ekleyelim.(projeye sağ tıkla,Add,new item). Datagriddeki verileri rapora parametre olarak gonderebilmek için projeye dataset1.xsd ekleyelim. dataset tabloadı ve alanlarını aşağıdaki gibi ayarlamamız gerekir.
Projede CyrstalReport1.rpt nesnesini görüntüleyebilmek için bir tane xaml dosyası(Window1.xaml) açarak içine reportview nesnesini yukleyelim.
xmlns:crystal="clr-namespace:CrystalDecisions.Windows.Forms;assembly=CrystalDecisions.Windows.Forms"
<WindowsFormsHost>
<crystal:CrystalReportViewer x:Name="MyCrystalReportViewer" Width="300" Height="300"/>
</WindowsFormsHost>
Formumuzdaki (MainWindow.xaml) rapor butonun click olayında verileri cyrstalReport a gonderelim.
Window1 rapor = new Window1();
ParameterFields pfs = new ParameterFields();
ParameterField teslimeden = new ParameterField();// teslimedeni cyrtal rapora parametre olarak gonderdik
ParameterDiscreteValue p3 = new ParameterDiscreteValue();
teslimeden.ParameterFieldName = "teslimeden";p3.Value = label3.Content.ToString();
teslimeden.CurrentValues.Add(p3);
ParameterField teslimalan = new ParameterField();// teslialani cyrtal rapora parametre olarak gonderdik
ParameterDiscreteValue p4 = new ParameterDiscreteValue();
teslimalan.ParameterFieldName = "teslimalan";
p4.Value = label4.Content.ToString();
teslimalan.CurrentValues.Add(p4);
pfs.Add(teslimeden);
pfs.Add(teslimalan);
rapor.MyCrystalReportViewer.ParameterFieldInfo = pfs;
CrystalReport1 report = new CrystalReport1();
DataSet1 ds = new DataSet1();// datagriddeki verileri cyrstal reporta aktarmak için
DataTable s = ds.Tables.Add("Items");s.Columns.Add("aletbarkod", Type.GetType("System.String"));
s.Columns.Add("aletadi", Type.GetType("System.String"));
s.Columns.Add("durum", Type.GetType("System.String"));
DataRow r;
int m = 0;
for (m = 0; m < dataGrid1.Items.Count-1; m++){
r = s.NewRow();
var alt= dataGrid1.Items[m] as alet;
r["aletadi"] = alt.aletadi.ToString();
r["durum"] = alt.durum.ToString();
r["aletbarkod"] = alt.aletbarkod.ToString();
s.Rows.Add(r);
}
report.SetDataSource(ds.Tables["Items"]);
rapor.MyCrystalReportViewer.ReportSource = report;//myCrystalReportViewer, window1'in xaml kısmında tanımlandı.
rapor.Show();
CrystalReport1.rpt tasarımı
CrystalReport1.rpt sayfasını actığımızda sol kısımda field Explorer var . Bu pencerede databese kısmına dataseti yukleyebilmek için database expert e tıklıyoruz. Gelen ekranda projede tanımladığımız dataseti secip tamam dediğimizde databesın altında görünür olacaktır. diğer tekil alan parametreleri (teslim eden ve teslim alan) Parameters Field alanında tanımlıyoruz.Sağ tıklayarak new ile parametre adını giriyoruz burada dikkat etmemiz gereken nokta girdiğimiz isim ile buton altına yazdığımız isimlerin aynı olması. örneğin teslimeden için "teslimeden" olmalı. tüm parametreler tanımlandıktan sonra rapor ekranına sürükleyerek istediğimiz rapor şablonunu olusturabiliriz.
Örnek rapor tasarımı:
Program çıktısı:
Hiç yorum yok:
Yorum Gönder