C# LINQ:如何检查列表框项的对象值并相应地设置颜色
本文关键字:对象 颜色 设置 何检查 LINQ 列表 检查 | 更新日期: 2023-09-27 17:57:16
我想知道这是否可能。下面是填充列表框的代码:
var allHolds =
from a in db.Record_HoldDatas
join f in db.LUT_Flavors on a.Flavor equals f.ID
into flavorNames
where a.HoldStatus == "Open"
from grouped in flavorNames
select new { a.HoldID, a.DateOpened, grouped.flavor, a.NonConformingItem,
Caption = a.HoldID + " - " + a.Package + " " + grouped.flavor };
lbxHoldCaption.DataSource = allHolds;
lbxHoldCaption.DisplayMember = "Caption";
我想做的是编写一个循环,该循环遍历列表框中的每个对象,并使用几个值来执行一些数学运算。如果数学结果是某个值,那么我希望它更改该项目的背景颜色。
我不确定如何使用 foreach 循环。由于列表框实际上绑定到一个充满匿名类型的引用
更具体地说,这就是我正在做的事情:从查询返回的对象中的一个值是日期时间"DateOpened"我想用它减去今天的日期时间来确定经过的小时数。我正在使用这样的东西
DateTime now = DateTime.Now;
DateTime then = //retrieved from query object
TimeSpan span = now - then;
我希望用类似的东西来做这整件事
foreach(Object obj in allHolds)
{
then = obj.DateOpened;
span = now - then;
if(span.TotalHours >= 48)
{
obj.BackColor = Color.Red;
}
}
但显然这是行不通的,因为引用都是无聊的。有人可以帮助我吗?
试试这个
var allHolds =
from a in db.Record_HoldDatas
join f in db.LUT_Flavors on a.Flavor equals f.ID
into flavorNames
where a.HoldStatus == "Open"
from grouped in flavorNames
select new { a.HoldID, a.DateOpened, grouped.flavor, a.NonConformingItem,
Caption = a.HoldID + " - " + a.Package + " " + grouped.flavor,
BackColor = (DateTime.Now - a.DateOpened).TotalHours >= 48 ? "Red" : "Blue" };
和
lbxHoldCaption.DataSource = allHolds;
lbxHoldCaption.DisplayMember = "Caption";
lbxHoldCaption.DataBindings.Add("BackColor", allHolds,"BackColor");
foreach (ListItem xx in ListBox1.Items)
{
if (Convert.ToInt32(xx.Value) == 3)
{
xx.Attributes["style"] = "background-color:red;";
}
}
不要忘记ListBox的那些属性:DataTextField="Caption" DataValueField="DateOpened"
很简单,使用 var 关键字,这样你就不需要显式指定类型了。
foreach(var obj in allHolds)
{
then = obj.DateOpened;
span = now - then;
if(span.TotalHours >= 48)
{
obj.BackColor = Color.Red;
}
}