Change Group Section Dynamically

Posted at : Jun/13/2007
4536 Views

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);
}
}
}

 


ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Co-Founder & IT Trainer at Native Enterprise | Microsoft Azure Data Scientist | IBM RAG & Agentic AI | IBM Data Science & Data Analyst | Python Certified (PCEP, PCAP) | MOS, MTA, Xamarin Certified, ex MCT | ex MVP

CERTIFICATIONS

Microsoft Certified Associate
IBM RAG and Agentic AI Professional
IBM Data Science Professional IBM Data Analyst Professional
PCAP Associate Python Programmer Certified PCEP Entry Level Python Programmer Certified
Xamarin Certified
MOS 2007
MCPD MCTS
MCAD.NET

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  X Twitter Facebook  Instagram  LinkedIn

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2026   Rully Yulian MF   All rights reserved.