我一般在DataGrid的ItemDataBound事件中处理,而不是改动数据源,象这样:
DataGrid1_ItemDataBound(object src,DataGridItemEventArgs e){
if(e.Item.ItemType==ListItemType||e.Item.ItemType==ListItemType.AlternatingItem){
//假设你的按钮在第二列,并且是一个LinkButton
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
if(button!=null){
if((int)((DataRowView)e.Item.DataItem)["状态"]==0)
button.Text="状态是0";
else
button.Text="你随便修改";
}
}
}
DataGrid1_ItemDataBound(object src,DataGridItemEventArgs e){
if(e.Item.ItemType==ListItemType||e.Item.ItemType==ListItemType.AlternatingItem){
//假设你的按钮在第二列,并且是一个LinkButton
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
if(button!=null){
if((int)((DataRowView)e.Item.DataItem)["状态"]==0)
button.Text="状态是0";
else
button.Text="你随便修改";
}
}
}
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
//假设你的按钮在第二列,并且是一个LinkButton
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
if(button!=null){
if((int)((DataRowView)e.Item.DataItem)["状态"]==0)
button.Text="状态是0";
else
button.Text="你随便修改";
}
}
}
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
错误信息如下:
Controls[0]超出了索引范围
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
改成:
LinkButton button=(LinkButton)e.Item.Cells[0].Controls[0];
再试试
不行也可试试用2,一般参数0是用于默认编辑框用的
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];改为
LinkButton button=(LinkButton)e.Item.Cells[0].Controls[0];
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
关键的问题并不在于第几列(即:Cell的索引值),而是Controls的索引值,总是报错!
<asp:datagrid id="MyGrid1" runat="server" OnItemDataBound="MyGrid1_OnItemDataBound" CellPadding="4"
BackColor="White" BorderWidth="1px" BorderStyle="Double" BorderColor="#666666" OnPageIndexChanged="MyGrid1_PageIndexChanged"
OnItemCommand="MyGrid1_ItemCommand" PageSize="3" AllowPaging="True" Width="100%">
<SelectedItemStyle Font-Bold="True" ForeColor="Black" BackColor="#D5F1FF"></SelectedItemStyle>
<AlternatingItemStyle ForeColor="Black" BackColor="White"></AlternatingItemStyle>
<ItemStyle Font-Size="9pt" ForeColor="#666666" BackColor="White"></ItemStyle>
<HeaderStyle Font-Size="10pt" Font-Names="新宋体" Font-Bold="True" HorizontalAlign="Center" ForeColor="#666666"
BackColor="#F6F6F6"></HeaderStyle>
<FooterStyle HorizontalAlign="Center" ForeColor="#FF0066" BackColor="White"></FooterStyle>
<Columns>
<asp:ButtonColumn Text="<img src='Images/select.gif' border=0 align=center width=25 height=25>"
HeaderText="选择" CommandName="Select">
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle Font-Size="20px" Font-Bold="True" HorizontalAlign="Center" ForeColor="#127AC9" VerticalAlign="Middle"></ItemStyle>
</asp:ButtonColumn>
<asp:ButtonColumn Text="<img src='Images/yw.gif' border=0 align=center width=20 height=25>"
HeaderText="查看原文" CommandName="Display">
<HeaderStyle Width="40px"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" ForeColor="#127AC9" VerticalAlign="Middle"></ItemStyle>
</asp:ButtonColumn>
</Columns>
<PagerStyle HorizontalAlign="Left" ForeColor="#333333" BackColor="White" Mode="NumericPages"></PagerStyle>
</asp:datagrid>================================================================================
非常感谢以上各位的帮助,我把客户端的代码贴出来啦:)
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
//假设你的按钮在第二列,并且是一个LinkButton
LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
if(button!=null){
if(e.item.cells[2].Text == "状态是0") //这儿假设你要参考的信息绑定在第三列
button.Text="状态是0";
else
button.Text="你随便修改";
}
}
}
For Each ctl In e.Item.Cells(i).Controls
if ctl.GetType.ToString = "System.Web.UI.WebControls.LinkButton" then
'do Something
End if
Next
http://expert.csdn.net/Expert/topic/2609/2609621.xml?temp=.4256708