报什么错?System.Web.UI.WebControls.Image b=(System.Web.UI.WebControls.Image)e.Item.FindControl("img1");
if(b!=null)b.ImageUrl=strph;

解决方案 »

  1.   

    private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
      if(e.Item.ItemIndex>=0)
       {  
             Image b=(Image)e.Item.FindControl("img1");
             b.ImageUrl=strph;
       } 
    }
      

  2.   

    在itemDataBound事件里面,数据还没有真正绑定
    (我的个人理解,因为我也曾经试图在这个事件里面取值,并且失败了)
    所以,在这个事件里面只能设置控件的状态
    而不能取绑定后的值
      

  3.   

    不对,在ItemDataBound事件里面可以取出DataGrid任一行任一列的值!
      

  4.   

    if (b!=null) b.ImageUrl=strph;或将代码放入try中,
    try{
    if(e.Item.ItemIndex>=0)
       {  
    int ids;
    ids=e.e.Item.Cells[0].Controls[0];
             int  idp=returnvalue(ids); 
      System.Web.UI.WebControls.Image b=new System.Web.UI.WebControls.Image();
      b=(System.Web.UI.WebControls.Image)e.Item.FindControl("img1");
      b.ImageUrl=strph;
       } 
    }
    catch{
    ...
    }
      

  5.   

    可以取值,给你看一个我做的列值汇总的代码吧,希望对你有所帮助private void DataGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if (e.Item.ItemIndex >= 0)
    {
    for (int i = 2;i <= e.Item.Cells.Count - 1; i++)
                        dbArg[i] += double.Parse(e.Item.Cells[i].Text);
    }
    else if (e.Item.ItemType == ListItemType.Footer)
    {
    e.Item.Cells[1].Text = "汇总";
    e.Item.Cells[1].HorizontalAlign = HorizontalAlign.Center;
    for (int i = 2;i <= e.Item.Cells.Count - 1; i++ )
    e.Item.Cells[i].Text = dbArg[i].ToString();
    }
    }
      

  6.   

    在itemDataBound事件里面,数据还没有真正绑定
    (我的个人理解,因为我也曾经试图在这个事件里面取值,并且失败了)我不这么认为,我认为已经绑定了,只不过在这时候我么可以进行修改
      

  7.   

    一般绑定后,会调用CreateItem方法。
    在Create方法内,一般的做法是:            if (dataBind) {
                    item.DataBind();
                    OnItemDataBound(e);                item.DataItem = null;
                }
    所以,在OnItemDataBound前,数据已经帮定了。
    而且,在这个方法中可以使用item.DataItem
    (这个是和页面的<%# %>标记使用Container.DataItem相关的)对于你的程序,首先e.Item.ItemIndex肯定大于-1的,所以那个if是多余的了。
    然后,你应该使用 e.Item.DataItem 来获取数据,而不是绑定后的列的某些字符值.例如如果DataSource=dataTable,那么应该是:
    DataRow thisRow=(DataRow)e.Item;如果DataSource=dataView,那么应该是:
    DataRow thisRow=((DataRowView)e.Item).Row;至于你的程序出错,你要确定Cells[0].Controls[0]的确是你预期的控件?
      

  8.   

    在执行DataGrid1.DataBind()方法之后,事件的激发顺序是:
    CreateItem(建立Header) --> ItemDataBound(绑定Header) --> CreateItem(建立第一行) --> ItemDataBound(绑定第一行) --> CreateItem(建立第二行) --> ItemDataBound(绑定第二行) ...
    在ItemDataBound中就可以得到绑定后的数据。当页面返回的时候,只执行CreateItem事件。DataGrid的数据将从ViewState里获取。
      

  9.   

    谢谢楼上提醒了还有ItemType的区别~~~~
    ..