如何根据从LINQ到实体的数据更改gridview单元格背景图像?

时间:2012-01-09 14:49:02

标签: asp.net

我是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列的每个单元格中获得相同的背景图像。任何帮助将不胜感激。

2 个答案:

答案 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)...
}

对应于您的数据源的每一行都会触发此事件。