在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。请建议如何做到这一点?
在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() %>' />