日期:2014-05-19  浏览次数:20413 次

为什么e.Item.Cells[n].Text取不到值
主要代码如下
<asp:DataGrid   id= "DataGrid1 "   DataKeyField= "ID "   runat= "server "   AutoGenerateColumns= "False ">
<Columns>

<asp:TemplateColumn   HeaderText= "重量 ">
<ItemTemplate>
<asp:Label   runat= "server "   Text= ' <%#   DataBinder.Eval(Container,   "DataItem.Carat ")   %> '   ID= "Label4 "> </asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
//…………(还有好几个TemplateColumn   )
</Columns>
</asp:DataGrid>

cs代码:

DataGrid1.DataSource=helper1.sel(sql);     //自定义类,返回一个DataTable
DataGrid1.DataBind();


//DataGrid1_ItemDataBound事件

private   void   DataGrid1_ItemDataBound(object   sender,   System.Web.UI.WebControls.DataGridItemEventArgs   e)
{
if(e.Item.ItemType       ==       ListItemType.Header)      
{
e.Item.Cells[2].Text=e.Item.Cells[2].Text+ "随便加个值 ";     //这行的就可以
}
if(e.Item.ItemIndex   > =   0)      
{
e.Item.Cells[2].Text=e.Item.Cells[2].Text+ "随便加个值 ";     //这行的就不行
  }
}


在定义头的时候,就取得了e.Item.Cells[2].Text的值
在定义具体列的值的时候。无论怎么办e.Item.Cells[2].Text都是为空的
不光是e.Item.Cells[2].Text
其他的列全部一样。

请教下为什么?我经常用这个办法的???

------解决方案--------------------
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{}
------解决方案--------------------
当然取不到值,DataGrid1_ItemDataBound是在页面加载之前执行,参照:

http://blog.csdn.net/wangkun9999/archive/2007/03/02/1518759.aspx
------解决方案--------------------
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
e.Item.Cells[2].Text=e.Item.Cells[2].Text+ "随便加个值 "; //
}

------解决方案--------------------

调试下if(e.Item.ItemIndex > = 0)这个条件能不能满足
------解决方案--------------------
e.Item.Cells[2].Text 你的CELL2是不是 标准的绑定列?
如果里边是其他控件就得不到值的。
比如是个IMG标记或者其他的
如果是 <input type= "text " > sdjhfer </input> 的话还可以得到sdjhfer
如果是 <input type= "text " value= "sdjhfer " /> 就得不到了
------解决方案--------------------
直接在cs里写个方法。。在HTML里 <%# ..... %> 在.....那里调用cs里的方法。。。也可以传参数。。。