在gridview模板字段中显示整数值的错误

时间:2013-08-02 07:04:26

标签: c# asp.net gridview

我有一个这样的gridview专栏:

<asp:TemplateField HeaderText="<%$ Resources:UserProfile, C_Updated %>" ItemStyle-Wrap="false" SortExpression="Updated">
    <ItemTemplate>
        <asp:Literal ID="UpdatedLiteral" runat="server" 
         Text='<%# (Eval("Updated").ToString()) == "0" ? string.Format("<span class=greenText>{0}</span>", GetGlobalResourceObject("Vacancies", "VacancyToday")) : ((int)Eval("Updated")) %>' />

        <asp:Literal ID="UpdateddaysLiteral" runat="server" Text='<%$ Resources:UserProfile, C_UpdatedDays %>' />
    </ItemTemplate>
</asp:TemplateField>
更新字段中的

值为0或大于0.但我收到错误:

  

CS0173:无法确定条件表达式的类型,因为   'string'和'int'之间没有隐式转换。

另外,我想仅在更新列的值大于0时显示UpdateddaysLiteral。请建议如何执行此操作?

3 个答案:

答案 0 :(得分:1)

b&amp; b之间应该只有一个隐式转换c in:

var value = a?b:c

此转换可以在任何方向。

这意味着b应隐式转换为c或反之。

在你的情况下,你有b为String,c为Int,两者之间没有隐式转换。这就是出现此错误的原因。 MSDN may help.

例如,这也会显示相同的错误:

lbldate.Text= (DateTime.Parse(TextBoxActualEndDate.Text)) : null;

所以修正是:(使任何一方可转换为其他方面)

lbldate.Text= (DateTime?)(DateTime.Parse(TextBoxActualEndDate.Text)) : null;

答案 1 :(得分:0)

在你病情的最后部分:

: ((int)Eval("Updated"))

为什么要将“更新”转换回int?只需Eval("Updated").ToString()即可。

问题的第二部分:

<asp:Literal ID="UpdateddaysLiteral" runat="server" Visible='<%# Eval("Updated") > 0 ? "true", "false" %>' ...

答案 2 :(得分:0)

解决方法:KISS原则,这意味着保持简单愚蠢。 为什么你在aspx中使事情变得复杂,当你可以完美地从代码背后做到这一点。

创建一个方法来对代码隐藏进行比较逻辑。这样的事情。

/// This might not be you exact logic, but it will help you 
public string comparevalues(string value)
{
  if(Convert.ToInt32(value)>0)
  {
      //do something
  }
  else
  {
     // do something else;
  }
  return result_as_string;
}

在你的aspx中:

<asp:Literal ID="UpdatedLiteral" runat="server"
Text='<%#comparevalues(Eval("Value_To_Evaluate").ToString() %>' />