Change Sort Order in Group Section Dynamically

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 frmGroupBy : Form {
DataTable dtCustomers = new DataTable();
rptGroupBy rpt = new rptGroupBy();

public frmGroupBy()
{
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 SortReport(bool ASC)
{
SortFields allSortField;
allSortField = rpt.DataDefinition.SortFields;
foreach (SortField aSortField in allSortField)
{
if (ASC)
{
if (aSortField.SortType ==
CrystalDecisions.Shared.SortFieldType.GroupSortField)
{
if (aSortField.Field.Name == "Region")
{
aSortField.SortDirection =
CrystalDecisions.Shared.SortDirection.AscendingOrder;
}
}
}
else {
if (aSortField.SortType ==
CrystalDecisions.Shared.SortFieldType.GroupSortField)
{
if (aSortField.Field.Name == "Region")
{
aSortField.SortDirection =
CrystalDecisions.Shared.SortDirection.DescendingOrder;
}
}
}
}
crystalReportViewer1.ReportSource = rpt;
crystalReportViewer1.Refresh();
}

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

private void btnSortASC_Click(object sender, EventArgs e)
{
SortReport(true);
}

private void btnSortDesc_Click(object sender, EventArgs e)
{
SortReport(false);
}
}
}

Comments