在gridview模板字段中显示整数值时出错

本文关键字:整数 出错 显示 gridview 字段 | 更新日期: 2023-09-27 18:25:58

我有一个网格视图列,如下所示:

<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"answers"int"之间没有隐式转换。

此外,我只想在更新列的值大于0时显示UpdateddaysLiteral。请建议如何做到这一点?

在gridview模板字段中显示整数值时出错

在b&c英寸:

var value = a?b:c

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

这意味着b应该隐式地转换为c,或者相反。

在您的例子中,b是String,c是Int,两者之间没有隐式转换。这就是出现此错误的原因。MSDN可能会有所帮助。

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

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

因此,修正是:(使任何一侧可转换为另一侧)

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

在您的条件的最后部分:

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

为什么要将"Updated"选回int?只要Eval("Updated").ToString()就足够了。

问题的第二部分:

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

解决方法: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() %>' />