我一般在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="你随便修改";
}
}
}

解决方案 »

  1.   

    对不起,上面丢了几个字:DataGrid1_ItemDataBound(object src,DataGridItemEventArgs e){
    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="你随便修改";
    }
    }
    }
      

  2.   

    我上面的代码就适用于按钮列,按钮的类型是LinkButton,如果你用PushButton,把里面的LinkButton改为Button应该可以了。
      

  3.   

    不对呀,我改了也不行呀,而且还经常提示这一句有误
    LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
    错误信息如下:
    Controls[0]超出了索引范围
      

  4.   

    你的按钮列好象是在第一列,
    LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
    改成:
    LinkButton button=(LinkButton)e.Item.Cells[0].Controls[0];
    再试试
      

  5.   

    LinkButton button=(LinkButton)e.Item.Cells[1].Controls[1];
    不行也可试试用2,一般参数0是用于默认编辑框用的
      

  6.   

    你最初的帖子说有两个按钮列,但代码中却只有一个按钮列,如果你要取第一列的按钮,应该将我上面代码中的
    LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];改为
    LinkButton button=(LinkButton)e.Item.Cells[0].Controls[0];
      

  7.   

    是的,是两个按钮列,后来我在代码中删除了一个,所以代码应该是:
    LinkButton button=(LinkButton)e.Item.Cells[1].Controls[0];
    关键的问题并不在于第几列(即:Cell的索引值),而是Controls的索引值,总是报错!
      

  8.   

    你把按钮列转换为模板列,然后给linkButton一个ID,然后用e.item.findcontrol("LinkButtonID")
      

  9.   

    你在代码中删除了一列是什么意思?如果象你最初的代码,超出索引的应该是Cells[1]。帖出你的代码看看。
      

  10.   

    control里面可能多了一个literalcontrol,所以下标换成1看看e.Item.Cells[1].Controls[1]
      

  11.   

    应该用e.Item.Cells[1].Controls[1],Controls[0]好象是个<td>之类的东西。
      

  12.   

    ========================================客户端====================================
    <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="&lt;img src='Images/select.gif' border=0 align=center width=25 height=25&gt;"
    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="&lt;img src='Images/yw.gif' border=0 align=center width=20 height=25&gt;"
    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>================================================================================
    非常感谢以上各位的帮助,我把客户端的代码贴出来啦:)
      

  13.   

    现在的"按钮类型"是"LinkButton"
      

  14.   

    DataGrid1_ItemDataBound(object src,DataGridItemEventArgs e){
    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="你随便修改";
    }
    }
    }
      

  15.   

    在DataGrid1_ItemDataBound里写Dim ctl As Control
    For Each ctl In e.Item.Cells(i).Controls
        if ctl.GetType.ToString = "System.Web.UI.WebControls.LinkButton" then
             'do Something
        End if
    Next
      

  16.   

    问题已解决,非常感谢webdiyer(陕北吴旗娃)及其它朋友的支持,还有一个问题就是如何将连接列(linkButton)中的某一条数据的链接去掉呢?
      

  17.   

    一样,可以在ItemDataBound事件中处理,象上面那样先找那那个LinkButton,然后把它的Enabled属性设为false。
      

  18.   

    再次感谢webdiyer(陕北吴旗娃) 请参与下一个问题:非常欢迎
    http://expert.csdn.net/Expert/topic/2609/2609621.xml?temp=.4256708