Posted at :
Jun/13/2007
Seperti yang telah kita ketahui sebelumnya bahwa Crystal Reports dapat menampilkan data yang diambil dari berbagai sumber data seperti DataSet, DataTable, DataReader, dan class yang implement IEnumerable. Pada artikel kali ini saya akan memperlihatkan contoh bagaimana caranya kita dapat melakukan filtering data dan sorting pada Crystal Report dengan menggunakan DataTable.
Sebenarnya simple sekali, karena DataTable sudah mempunyai properti yang return valuenya berupa DataView. Dari DataView tersebut kita gunakan properti RowFilter untuk filtering record dan Sorting untuk mengurutkan data berdasarkan kolom tertentu.
Contoh report yang dibuat ini mengambil data dari database AdventureWorks untuk view Sales.vIndividualCustomer untuk beberapa kolom yang dapat anda lihat di code. Kemudian di form tersebut disediakan combobox untuk filtering dan sorting record. Mari kita lihat saja code lengkapnya dan screen shot ketika aplikasi tersebut dijalankan.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace CrystalReportsApp
{
public partial class frmReport : Form {
DataTable dtSales = new DataTable();
rptSortByCR rpt = new rptSortByCR();
public frmReport()
{
InitializeComponent();
}
private void SetReportDataSource()
{
using(SqlConnection sqlConn = new SqlConnection(
@"Database=AdventureWorks;Uid=sa;Pwd=sql2005;Server=.\SQL2005"))
{
using (SqlCommand sqlCmd = new SqlCommand())
{
sqlCmd.CommandType = CommandType.Text;
sqlCmd.Connection = sqlConn;
sqlCmd.CommandText = "Select CustomerID,FirstName," +
"Phone,City,CountryRegionName From Sales.vIndividualCustomer";
if (sqlConn.State == ConnectionState.Closed) sqlConn.Open();
dtSales.Load(sqlCmd.ExecuteReader());
rpt.SetDataSource(dtSales);
crystalReportViewer1.ReportSource = rpt;
DataTable dtCountry = new DataTable("distinctCountry");
dtCountry = dtSales.DefaultView.ToTable(true,
dtSales.Columns["countryregionname"].ColumnName);
cboCountry.DataSource = dtCountry;
cboCountry.DisplayMember = "countryregionname";
foreach (DataColumn aColumn in dtSales.Columns)
{
cboSort.Items.Add(aColumn.ColumnName);
}
}
}
}
private void frmReport_Load(object sender, EventArgs e)
{
SetReportDataSource();
}
private void btnSearch_Click(object sender, EventArgs e)
{
dtSales.DefaultView.RowFilter = "CountryRegionName = '" +
cboCountry.Text + "'";
rpt.SetDataSource(dtSales.DefaultView);
crystalReportViewer1.ReportSource = rpt;
}
private void btnSort_Click(object sender, EventArgs e)
{
dtSales.DefaultView.Sort = cboSort.Text;
rpt.SetDataSource(dtSales.DefaultView);
crystalReportViewer1.ReportSource = rpt;
}
}
}