我有一个这样的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。请建议如何执行此操作?
答案 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() %>' />