数据不在数据库中时生成适当的报告[Telerik]

时间:2015-04-21 07:57:36

标签: sql telerik telerik-grid telerik-mvc telerik-reporting

我正在为此生成telerik报告 "按教育程度,领域和性别划分的学生人数"

这是我用来创建此报告的SQL查询

SELECT
    [tbl_hec_ISCED].[ISCED_ID], 
    [tbl_hec_ISCED].[ISCED_Level], 
    [tbl_hec_Programme].[ISCED_ID] AS 'tbl_hec_ProgrammeISCED_ID', 
    [tbl_hec_Programme].[Programme_ID], 
    [tbl_hec_Programme].[Specialisation_ID_Number], 
    [tbl_hec_specialisation].[Rank_ID_Number], 
    [tbl_hec_specialisation].[Rank_Title], 
    [tbl_HEI_student].[Programme_ID] AS 'tbl_HEI_studentProgramme_ID', 
    [tbl_HEI_student].[Gender]
FROM ((([tbl_HEI_student]
 FULL OUTER JOIN [tbl_hec_Programme]
 ON [tbl_HEI_student].[Programme_ID] = [tbl_hec_Programme].[Programme_ID])
 FULL OUTER JOIN [tbl_hec_specialisation]
 ON [tbl_hec_Programme].[Specialisation_ID_Number] = [tbl_hec_specialisation].[Rank_ID_Number])
 FULL OUTER JOIN [tbl_hec_ISCED]
 ON [tbl_hec_Programme].[ISCED_ID] = [tbl_hec_ISCED].[ISCED_ID])
WHERE ([tbl_HEI_student].[Gender]='Male' or [tbl_HEI_student].[Gender]='Female') and ([tbl_hec_ISCED].[ISCED_Level]='5' or [tbl_hec_ISCED].[ISCED_Level]='6'or [tbl_hec_ISCED].[ISCED_Level]='7'or [tbl_hec_ISCED].[ISCED_Level]='8')

我收到空报告,因为某些值不在数据库中。我附上了它的照片,

这是该观点

enter image description here

我希望在数据库中没有数据时生成报告。如下所示,表示空行的零值。

此处有预期的报告输出

enter image description here

我如何克服这一挑战

1 个答案:

答案 0 :(得分:0)

我的建议是使用文档合并功能,使用已经设置了所有报表布局的模板以及将被计算值替换的值占位符(字段)。

我在我的项目中使用Aspose.Words库,但我确信其他人甚至可能甚至还有Telerik Reporting。这是非常简单的功能,因此任何可以执行复杂操作的报表工具也必须能够执行此操作。

这是Aspose的一些示例代码。其他库将有不同的实现。

using Aspose.Words;

void GenerateDocument(string templateFilePath, Dictionary<string, object> fieldNamesAndValues) 
{
    // This is our document object
    Document output = null;

    // Obtain the template file
    if (File.Exists(templateFilePath))
    {
        // If the template file is successfully located, use this template
        output = new Document(templateFilePath);
    }

    // Merge the provided values into the appropriate fields of the template
    output.MailMerge.Execute(fieldNamesAndValues.Keys.ToArray(), fieldNamesAndValues.Values.ToArray());

    // Save the document into a stream as PDF
    MemoryStream stream = new MemoryStream();
    doc.Save(stream, SaveFormat.Pdf);

    // You can then do whatever with the stream: 
    // save it or push it to the browser for download
}

以您的预期结果为例,我们假设这些是第一行占位符(字段)的名称:

MALE_EDUCATION_ISCED5, MALE_EDUCATION_ISCED6, MALE_EDUCATION_ISCED7

然后您可以像这样生成报告:

Dictionary<string, object> fieldsAndValues = new Dictionary<string, object>();

fieldsAndValues.Add("MALE_EDUCATION_ISCED5", calculatedValue1);
fieldsAndValues.Add("MALE_EDUCATION_ISCED6", calculatedValue2);
fieldsAndValues.Add("MALE_EDUCATION_ISCED7", calculatedValue3);
// and so on for other fields

GenerateDocument("~/Templates/Report.docx", fieldsAndValues);

有关如何在Microsoft Word中添加字段的详细信息: https://support.office.com/en-us/article/7e9ea3b4-83ec-4203-9e66-4efc027f2cf3

有关Aspose MailMerge的更多信息: http://www.aspose.com/docs/display/wordsnet/How+to++Execute+Simple+Mail+Merge