我正在使用TemplateField将额外的“计算”列添加到绑定到数据库中的表的gridview。我收到这个奇怪的错误,我不知道如何开始调试它。我可能使用<%#
语法做错了/不可行,如果是,请告诉我什么。我不太了解它。
代码:
<asp:TemplateField>
<ItemTemplate>
<asp:Label runat="server" Text='<%# Math.Round(decimal.Parse((((int.Parse(Eval("Num1").ToString())) * 36) / (235 * int.Parse(Eval("Num2").ToString()))).ToString()), 0); %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
错误: CS1525:无效的表达式术语','
有一个逗号...但它是Math.Round的第二个参数。或者我正在做一些不能用这种方式做的事情?此外,Math.Round行不表示代码隐藏中的任何错误(我的括号应该是好的)。
答案 0 :(得分:6)
在数据绑定表达式中,您只能使用一个语句。删掉“;”。我相信声明本身就是格式良好的。
答案 1 :(得分:2)
如果你真的需要能够进行舍入等,只需在后面的代码中创建一个名为Round的公共函数,并从数据绑定表达式中调用它。这样,您就不会遇到任何逗号问题,也不会将所有逻辑放在一个地方,以便以后更容易保持一致性。
答案 2 :(得分:1)
对我来说看起来不错。但是,它看起来似乎是一个相当令人困惑的文本行。如果Num1和Num2是数据库中的列,那么您只需在表示该表的类上添加属性。
因此,在定义Num1和Num2的位置旁边,定义另一个属性 - 不表示数据库中的列,而是计算数据库中的值。
这将从一个特定页面中删除计算,因此如果您必须在某处再次使用它,则只需引用该属性。
或者,您可以在代码后面引用一个方法......
<%# GetComputedValue((int)Eval("Num1"), (int)Eval("Num2")) %>
protected string GetComputedValue(int num1, int num2)
我更喜欢财产理念,因为它可以重复使用。