1

我有一个这样的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。请建议如何执行此操作?

4

3 回答 3

1

b & c 之间应该有一个隐式转换:

var value = a?b:c

这种转换可以是任何方向的。

这意味着要么b应该隐式转换为,要么c相反。

在您的情况下,您有bString 和cInt ,两者之间没有隐式转换。这就是出现此错误的原因。MSDN 可能会有所帮助。

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

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

所以更正是:(使任何一方可转换为另一方)

lbldate.Text= (DateTime?)(DateTime.Parse(TextBoxActualEndDate.Text)) : null;
于 2013-08-02T07:36:31.263 回答
0

解决方法:KISS 原则,这意味着 Keep It Simple Silly。你为什么要在你的 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() %>' />
于 2013-08-02T07:13:52.687 回答
0

在您的情况的最后一部分:

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

为什么要将“更新”转换回 int?Eval("Updated").ToString()应该够了。

你问题的第二部分:

<asp:Literal ID="UpdateddaysLiteral" runat="server" Visible='<%# Eval("Updated") > 0 ? "true", "false" %>' ...
于 2013-08-02T07:08:36.303 回答