为什么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里的方法。。。也可以传参数。。。