我基本上需要根据特定值更改Gridview的行颜色。这就是我所拥有的:
if ((String)DataBinder.Eval(e.Row.DataItem, "STATUS") == "A" || (String)DataBinder.Eval(e.Row.DataItem, "STATUS") == "B" || (String)DataBinder.Eval(e.Row.DataItem, "STATUS") == "C")
{
e.Row.BackColor = Color.Yellow;
}
我正在寻找更清晰(或者我应该说更好)的方式,类似于我们在sql中的方式,而不是必须使用||操作者:
IF STATUS in('A','B','C')
答案 0 :(得分:4)
使用LINQ Contains
之类的:
if(new[] {"A", "B", "C"}
.Contains((String)DataBinder.Eval(e.Row.DataItem, "STATUS")))
如果你想忽略大小,那么:
if (new[] {"A", "B", "C"}
.Contains((String) DataBinder.Eval(e.Row.DataItem, "STATUS"),
StringComparer.InvariantCultureIgnoreCase))
{
}
答案 1 :(得分:1)
您可以尝试使用set来执行此任务, 如果它不会在运行时更改,则静态构建它 或者动态构建它:
var statuses = new HashSet<string>
{
"A",
"B",
"C"
}
并检查如下:
statuses.Contains((String)DataBinder.Eval(e.Row.DataItem, "STATUS"))
答案 2 :(得分:0)
实现目标的一种方法是创建一个临时的List
项,并使用条件中Contains
的{{1}}方法:
List
编辑:@Habib打败了我的答案,也更清洁了。 :)
答案 3 :(得分:0)
这不是解决此问题的最佳方式,但我认为此linq查询可以为您提供帮助。
if (listLine[-1]=='largeDoses'):
listLine[-1] = '3'
elif (listLine[-1]=='smallDoses'):
listLine[-1] = '2'
else:
listLine[-1] = '1'
答案 4 :(得分:0)
您可以使用词典方法。好的部分是你只需将它保存在某个逻辑可以集中在一个地方的地方。
var colorStatus = new Dictionary<string,Color>();
colorStatus["A"] = Color.Yellow;
colorStatus["B"] = Color.Yellow;
colorStatus["C"] = Color.Yellow;
现在稍后您可以使用此词典进行测试然后分配。
string status = (String)DataBinder.Eval(e.Row.DataItem, "STATUS");
if(colorStatus.ContainsKey(status))
{
e.Row.BackColor = colorStatus[status];
}