我使用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]关键字无效作为标识符。
任何人都可以解释为什么会这样吗?
答案 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属性中插入了随机数值 因此,要解决此类错误,请转到报告属性并从代码中删除值。