新的<%# - 奇怪的错误

时间:2012-03-05 14:14:10

标签: c# asp.net

我正在使用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行不表示代码隐藏中的任何错误(我的括号应该是好的)。

3 个答案:

答案 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)

我更喜欢财产理念,因为它可以重复使用。