我是LINQ和ADO.net EF的新手。我的ITM表中有一个名为“Change”的列,它存储double类型的值。我想根据使用LINQ to Entites检索的“更改”列中的值更改GridView单元格的背景图像。这是我的代码。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
using (mydbEntities myEntities = new mydbEntities())
{
foreach (var price in myEntities.ITMs)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (price.Change == 0)
e.Row.Cells[5].Attributes.Add("Style", "background: url(../Images/nc.png) no-repeat 5px center;");
else if (price.Change > 0)
e.Row.Cells[5].Attributes.Add("Style", "background: url(../Images/inc.png) no-repeat 5px center;");
else if (price.Change < 0)
e.Row.Cells[5].Attributes.Add("Style", "background: url(../Images/dec.png) no-repeat 5px center;");
}
}
}
}
运行此代码时,无论值如何,我都会在Gridview列的每个单元格中获得相同的背景图像。任何帮助将不胜感激。
答案 0 :(得分:0)
Row_DataBound每行被触发一次,你正在其中进行foreach。这意味着你在n行的网格上迭代≈n 2 次。
您的代码只会对网格的最后一行产生影响,因为这将是您的if (if (e.Row.RowType == DataControlRowType.DataRow))
评估为true的最后一次。您的代码不必要地迭代,不起作用。
你可以做的是这样的事情:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView rowView = (DataRowView)e.Row.DataItem;
double price = double.Parse(rowView["price"].ToString());
if(price==0.0)
{
e.Row.Cells[5].Attributes.Add("Style", "background: url(../Images/nc.png) no-repeat 5px center;");
}
else if(price > 0.0 )
{
//....
}
//etc
}
}
答案 1 :(得分:0)
您可以通过e.Item.DataItem
活动中的**ItemDataBound**
媒体资源访问您的数据。您需要将其强制转换为正确的类型,才能访问price.Change
值。
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var data = e.Item.DataItem;
// ....
if (data.price.Change = 0)...
}
对应于您的数据源的每一行都会触发此事件。