Change Group Section Dynamically

Created at : Jun/13/2007   [Click this link to download code sample]
1796 Views   2 Comments

Seperti yang telah dijelaskan di artikel sebelumnya bahwa kita bisa merubah Sort Order record berdasarkan kolom tertentu yang sudah dikelompokkan secara runtime dengan menggunakan class SortFields dan SortField. Pada artikel kali ini saya akan membuat contoh bagaimana kita bisa merubah data yang sudah dikelompokkan berdasarkan kolom yang dipilih oleh user secara runtime.

Secara prinsip sebenarnya tidak begitu berbeda dengan yang dilakukan untuk merubah SortOrder. Untuk dapat melakukan hal tersebut kita perlu mendapatkan informasi Group dari report yang digunakan. Dengan menggunakan class Groups yang terdapat di dalam namespace CrystalDecisions.CrystalReports.Engine informasi tsb dapat kita gunakan. Untuk merubah groupingnya dilakukan looping collection group yang terdapat di dalam Groups. Properti ConditionField dari object Group digunakan untuk assign value berupa field yang akan digunakan untuk grouping. Value tersebut harus berupa object FieldDefinition. Dari FieldDefinition tsb kita dapat merubah grouping secara run time. Sebagai tambahan, untuk merubah HeaderText kolom yang sudah ada pada crystal report, kita dapat melakukannya dengan cara seperti ini (misal : HeaderText di report mempunyai id "txtHeader" dan akan dirubah secara runtime properti text yang bersangkutan) , teknik ini akan digunakan untuk merubah header text kolom sesuai dengan kolom yang dipilih:

TextObject txtHeader;
txtHeader = rpt.ReportDefinition.ReportObjects["txtHeader"]
as TextObject;
txtHeader.Text = "Header Text Baru;

Contoh aplikasi yang dibuat menggunakan data dari tabel Customers database Northwind. Ketika design time report tsb di group berdasarkan kolom Region, tapi nantinya secara run time dapat dirubah sesuai dengan kolom yang dipilih. Source code dapat anda download, dimana source code ini berisi artikel-artikel crystal report sebelumnya untuk SortingOrder, Select Data Between Date, dsb...Mari kita lihat code nya secara lengkap :

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;
using CrystalDecisions.CrystalReports.Engine;

namespace CrystalReportsApp
{
public partial class frmChangeGroup : Form {
DataTable dtCustomers = new DataTable();
rptGroupBy rpt = new rptGroupBy();

public frmChangeGroup()
{
InitializeComponent();
}

private void SetReportDataSource()
{
using (SqlConnection sqlConn = new SqlConnection(
@"Database=Northwind2005;Uid=sa;Pwd=sql2005;Server=.\SQL2005"))
{
using (SqlCommand sqlCmd = new SqlCommand())
{
sqlCmd.CommandType = CommandType.Text;
sqlCmd.Connection = sqlConn;
sqlCmd.CommandText =
"Select * From Customers" +
" Where Region Is Not Null And Country Is Not Null";

if (sqlConn.State == ConnectionState.Closed) sqlConn.Open();
dtCustomers.Load(sqlCmd.ExecuteReader());

rpt.SetDataSource(dtCustomers);
crystalReportViewer1.ReportSource = rpt;
}
}
}

private void ChangeGroupField(string ColumnName)
{
Groups secGroups;
secGroups = rpt.DataDefinition.Groups;

FieldDefinition objField;
objField = rpt.Database.Tables["Customers"].Fields[ColumnName];

foreach (Group aGroup in secGroups)
{
aGroup.ConditionField = objField;
}

TextObject txtHeader;
txtHeader = rpt.ReportDefinition.ReportObjects["txtHeader"]
as TextObject;
txtHeader.Text = ColumnName;

crystalReportViewer1.ReportSource = rpt;
}

private void frmChangeGroup_Load(object sender, EventArgs e)
{
SetReportDataSource();
}

private void btnChangeGroup_Click(object sender, EventArgs e)
{
ChangeGroupField(comboBox1.Text);
}
}
}

 


[Comments]
ichsan_anam at yahoo Jul/07/2009 07:13:04 :
Alhamdulillah, Jazakallahu khayran katsiira.... atas sharingnya, langsung dipraktekin, soalnya lagi nemuin masalah yang membutuhkan kemampuan seperti ini. Terima kasih banyak ...
Rully Jul/07/2009 08:41:28 :
Sama-sama :)

[Write your comment]
Name (required)
URL (optional)
Example : http://www.yulianmf.com  
Comment

KZMQ
Input code above below (Case Sensitif) :
About Me 
Rully Yulian MF
My Name is Rully Yulian Muhammad Firmansyah. I am an IT Trainer, IT Consultant and Application Developer spesializing in Microsoft .NET technology and SQL Server database. I live in Bandung, Indonesia. My hobby is to play Guitar. [Read More...]
Top Download 
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 2235 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 2192 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 1523 times  
DataGridView Grouping : Downloaded 1243 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 1232 times  
Article Category 
Links 
Award 
Certifications 
MOS 2007
MCAS
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise - IT Training 
Native Enterprise Facebook Group 
My Facebook 
My LinkedIn 
Syndication (RSS 2.0) 
Powered By 
Native Enterprise News