how did you bind the DataGrid?do it inside
if (!IsPostBack)
{
// DataGrid1.DataBind();
}>>>为什么用第二条语句就报错呢
most likely,  you have other controls inside DataGrid1.Items[i].Cells[8], try
Response.Write("****" + DataGrid1.Items[i].Cells[8].Controls[0].GetType().Name + "***");

解决方案 »

  1.   

    TextBox tb= (TextBox)DataGrid1.Items[i].FindControl["tbPrice"];//i一变量
      

  2.   

    用tb = (TextBox)DataGrid1.Items[i].Cells[8].Controls[1];试试
      

  3.   

    这样做;
    TextBox tb= (TextBox)DataGrid1.Items[i].FindControl["tbPrice"]
      

  4.   

    "我在DataGrid中增加了一模板列(第9列),里面放置了控件TextBox"看你的代码:
    tb = (TextBox)DataGrid1.Items[i].Cells[8].FindControl["tbPrice"];好像是遍历datagriditem来找Textbox的,这就有问题了,datagriditem有数据项的行,有表头的item,有显示分页的item,碰到Header,Page的这样的datagriditem,肯定就找不到textbox了,(TextBox)也就肯定会出错了.
      

  5.   

    tb = (TextBox)DataGrid1.Items.Cells[8].FindControl["tbPrice"];
    去掉[i]试试
      

  6.   

    if(e.Item.ItemType == ListItemType.Item ||e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.Edi
    tItem) { TextBox tbox=(TextBox)e.Item.Cells[1].FindControl["tbPrice"]; string ss=tbox.Text;
    }
    这样是肯定没有问题的,先判断是不是有数据的行,然后再用具体的cell[具体的cell值]取得数据
      

  7.   

    偶知道了,楼主一定是在取Label1.Text之前刷新了页面,而同时又没有保存textbox的值,所以实际上Label1.Text取到了textbox的值,该值为""。
    (偶刚才的答案是错的,不好意思~~)
      

  8.   

    因为是用saucer提供的方法解决的