报告中的自定义 c# 代码

Custom c# code in a Report

我正在使用对象填充报表。一切正常,如果我的成员是字符串,但是,我有几个成员,它们是 List<string>

当我将这些字段添加到报告(在设计器中,visual studio 2012)和 运行 报告时,它们显示为

'#Error'

查看报表的属性,我可以看到有一个 'custom code' 选项卡,为此我输入了以下方法将字符串列表转换为字符串数组。

public string[] GetListItems(List<string> intList)
{
    var s = intList.ToArray();
    return s;
}

然后当我尝试用表达式替换该字段并输入以下内容时:

=Join(Code.GetListItems(Fields!Aka.Value),",")

然后是 运行 报告,VS 无法使用以下内容构建:

Error 2 The Value expression for the textrun ‘Aka.Paragraphs[0].TextRuns[0]’ contains an error: [BC30456] 'GetListItems' is not a member of 'ReportExprHostImpl.CustomCodeProxy'.

Error 1 There is an error on line 0 of custom code: [BC30183] Keyword is not valid as an identifier.

谁能解释这是为什么?

那是C#代码。直接在报表中只能使用 Visual Basic。 C# 可用作外部 DLL。

如果您刚刚创建了一个报告并显示了一个错误代码,例如 BC30016 标签在方法之外无效。 在我的案例中,我的原因是我在 report1.rdlc 的代码 属性 中插入了随机数值 因此,要解决此类错误,请转到报告属性并从代码中删除该值。

对于那些不会创建的人来说,经历了实现第三方DLL的困难。更简单;但是,更复杂的解决方案如下。

为了总结解决方案,您可以创建 returns 报告可以轻松处理的值的属性。

在我的场景中,我有 2 个 classes:

public class Parent {
    public Child { get; set; }
}

public class Child {
    public string Name { get; set; }
}

我绑定到我的报告的类型是父类;但是,我需要访问 Child 中的名称 属性。换句话说,我需要做的是:

Parent.Child.Name

这是我 运行 遇到的与 OP 运行 相同的问题。由于我的项目(大学项目)的范围,我不能为第三方 dll 或编写自己的 dll 而烦恼...

所以我所做的是向 Parent class 添加更多属性。

public class Parent {
    public Child { get; set; }
    public string ChildName { get => Child.Name; }
}

public class Child {
    public string Name { get; set; }
}

通过向 Parent 添加一个额外的 属性,它具有 Reports 可以使用的类型,我现在可以通过我的 [=13= 轻松访问 Child 的名称]class.

当然这很乱;但是,我无法使用 complicated/time 消耗更多的 dll 解决方案。

我只希望我的导师能允许这个解决方案而不受惩罚...