报告中的自定义c#代码

时间:2015-02-12 12:13:11

标签: c# asp.net reportviewer

我使用Object填充报表。一切正常,如果我的成员是字符串,但是,我有一些成员,List<string>

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

  

'#错误'

查看报告的属性,我可以看到有一个“自定义代码”选项卡,为此我输入了以下方法将字符串列表转换为字符串数组。

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

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

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

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

  

错误2 textrun的值表达式'Aka.Paragraphs [0] .TextRuns [0]'包含错误:[BC30456]'GetListItems'不是'ReportExprHostImpl.CustomCodeProxy'的成员。

     

错误1自定义代码的第0行出现错误:[BC30183]关键字无效作为标识符。

任何人都可以解释为什么会这样吗?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

对于那些无法创建的人来说,遇到了实现第三方DLL的困难。更简单;但是,更简洁的解决方案如下。

要总结解决方案,您可以创建返回报表可以轻松使用的值的属性。

在我的场景中,我有两个班级:

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

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

我绑定到报告的类型是Parent;但是,我需要访问Child内部的Name属性。换句话说,我需要这样做:

Parent.Child.Name

这遇到了OP遇到的同样问题。由于我的项目(大学项目)的范围,我不能打扰第三方dll或写我自己的dll ......

所以我所做的是为Parent类添加更多属性。

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

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

通过向Parent添加具有报告可以使用的类型的附加属性,我现在可以通过Child类轻松访问Parent的名称。

当然这很混乱;但是,我处于一种我无法使用更复杂/耗时的dll解决方案的情况。

我希望我的导师能够在不受惩罚的情况下允许这个解决方案...

答案 2 :(得分:-1)

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