DevExpress报告:动态组无法按预期工作

时间:2016-01-15 18:28:23

标签: c# dynamic devexpress report

我一直在使用一个C#应用程序,它应该显示一个动态组的报告,从0到“N”,所以我使用foreach循环来管理所有,代码如下:

private void AgregarAgrupaciones()
{
    if (Agrupaciones == null)
        return;

    DataSet dataSource = (DataSet) DataSource;

    GroupHeader1.Level = 0;
    int level = 1;

    foreach (var agrupacion in Agrupaciones.Reverse())
    {
        GroupHeaderBand grupoDinamico = new GroupHeaderBand();
        XRLabel labelAgrupacion = new XRLabel();
        labelAgrupacion.Text = agrupacion.Value;
        grupoDinamico.Controls.Add(labelAgrupacion);
        grupoDinamico.Height = 0;

        XRLabel labelValorAgrupacion = new XRLabel();
        labelValorAgrupacion.Text = "";
        XRBinding binding = new XRBinding("Text", null, "Inasistencias.Empleado_Inasistencias." + agrupacion.Value);
        labelValorAgrupacion.DataBindings.Add(binding);
        labelValorAgrupacion.Location = new Point(100, 0);
        grupoDinamico.Controls.Add(labelValorAgrupacion);

        string campoDb = "Inasistencias.Empleado_Inasistencias.";
        campoDb = campoDb + (agrupacion.Value == "Grupo Personal" ? "GrupoPersonalNombre" :  agrupacion.Value);
        GroupField campo = new GroupField(campoDb, DevExpress.XtraReports.UI.XRColumnSortOrder.Ascending);
        grupoDinamico.GroupFields.Add(campo);
        grupoDinamico.Level = level;
        level++;
        Bands.Add(grupoDinamico);
    }
}

以前的代码实际上会在报告中显示组的名称,但它并不是真正的分组,例如:

有下表

table

预期结果将是:

  • 第1组销售
  • 第2组办公室1
  • 第3组1号楼
    • John Smith
    • Richard Anderson
  • 第2组办公室2
  • 第3组1号楼
    • Michel Ferrer
  • 第2组办公室2
  • 第3组1号楼
    • 玛莎史蒂文森
  • 第1组营销
  • 第2组办公室3
  • 第3组1号楼
    • Pamela Murier

相反,我得到了这个:

  • 第1组销售
  • 第2组办公室1
  • 第3组1号楼
    • John Smith
    • Richard Anderson
    • Michel Ferrer
    • 玛莎史蒂文森
    • Pamela Murier

注意:填充组的方法是通过报告“打印前”操作调用的,我已经检查过数据源包含我需要的所有值。

1 个答案:

答案 0 :(得分:0)

您可以在预览后尝试此代码

GroupHeaderBand band = XtraReportToPreview.Bands[BandKind.GroupHeader] as GroupHeaderBand;
if (band != null)
{
        band.GroupFields.Clear();
        band.GroupFields.AddRange(new DevExpress.XtraReports.UI.GroupField[] 
        {
        // Set your condition for dynamic group by for each GroupField 
        new DevExpress.XtraReports.UI.GroupField("Customer", DevExpress.XtraReports.UI.XRColumnSortOrder.Ascending)
        });
}