首先我把button放在DataGrid里,然后这样写:
<asp:datagrid onitemdatabound="datagrid1_itemdatabound">
private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{Button btn = (Button)e.Item.FindControl("Btn_OK");
btn.Click +=new System.EventHandler(Btn_OK_Click);}
protected void btn_ok_click(object Sender,eventargs e)
{
}
出错,错误原因忘了.然后我把button放在了DataGrid外
this.btn_ok+=new system.EventHandler(btn_ok_click);...
protected void btn_ok_click(object sender,eventargs e)
{
   textbox title1=dg1.items[0].FindControl("Title");
}
错误原因:说是不是把Textbox转换成.....Control???

解决方案 »

  1.   

    TextBox title1=(TextBox)dg1.items[0].FindControl("Title");
      

  2.   

    TextBox title1=(TextBox)dg1.items[0].FindControl("Title");
      

  3.   

    TextBox title1=(TextBox)dg.items[0].FindControl("Title");
    需要进行强制转换btn.Click +=new System.EventHandler(Btn_OK_Click);
    ,委托好象不能在这里写,,可以在dg里指定button的commandname,然后,在DG的itemcommand里写事件,,比如把button的commandname 设为btn privat itemcommand(){
    if(e.commandname="btn")
    {
    语句
    }
    没有环境,呵呵
      

  4.   

    TextBox title1=(TextBox)dg1.items[0].FindControl("Title");这样可以,button要使用模板列,名字固定为Title,
      

  5.   

    TextBox title1=(TextBox)DataGrid1.items[0].FindControl("Title");
    这样可以,button要使用模板列,名字固定为Title,
      

  6.   

    这样可以,button要使用模板列,名字固定为Title,是什么意思?
    ==================
    ===========
    ==============
    ==========
    ============
    =======
      

  7.   

    你具体想实现什么?
    1、注意大小写
    2、FindControl后要类型转换,并且要检查是不是null
    3、放在datagrid里面的button可以靠ItemCommand事件,不需要自己+委托
      

  8.   

    你具体想实现什么?
    1、注意大小写
    2、FindControl后要类型转换,并且要检查是不是null
    3、放在datagrid里面的button可以靠ItemCommand事件,不需要自己+委托======
    哈。同意这位兄弟的观点。
      

  9.   

    赞同LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)的观点.
      

  10.   

    TextBox title1=(TextBox)dg1.items[0].FindControl("Title");
      

  11.   

    ==============又出现新问题============
    ======================================
    ======================================
    ======================================
    ======================================
    ======================================
        <asp:DataGrid ID ="DG_Edit" runat ="server" AutoGenerateColumns ="false" Border="0">
           <Columns >
              <asp:TemplateColumn >
                  <ItemTemplate >
                       <table class ="Style.css">
                           <tr>
                              <td>编辑</td>
                           </tr>
                           <tr>
                              <td>标题:<asp:TextBox ID ="Title" runat ="server" /></td>                       <tr><td><asp:Button ID ="Btn_OK" runat ="server" Text ="修改" />td></tr>
                       </table>
                  </ItemTemplate>
              </asp:TemplateColumn>
           </Columns>
        </asp:DataGrid>=======
        protected void Btn_OK_Click(object Sender, System.EventArgs e)
        {
            TextBox Title1 = (TextBox)DG_Edit.Items[0].FindControl("Title");
            Response.Write(Request ["Title1"].Trim ().ToString ());
        }
    出错:
    System.NullReferenceException: 未将对象引用设置到对象的实例。我要实现修改信息这个功能!
      

  12.   

    我已经把button拿到了,DataGrid外面
      

  13.   

    Response.Write(Request ["Title1"].Trim ().ToString ());
    是什么意思?
    是不是要把Title1 的信息显示出来
      

  14.   

    我还是建议你给button加commandname依靠datagrid的itemcommand事件,这样你只需要
    TextBox Title1 = (TextBox)e,Items.FindControl("Title");
    你出错的原因是第一行根本没有这个控件,我想你需要得到button那个行的文本框的text吧,如果你坚持这么做可以这么改:
    Button btn= (Button)(sender);
    DataGridItem dgi=(DataGridItem)(btn.Parent.Parent);
    TextBox Title1 = (TextBox)dgi.FindControl("Title");
    Response.Write(Title1.Text.Trim().ToString ());
      

  15.   

    关键是这样:
    如果:Title1.text.trim()能取出值,是以前文本框的值,根本不是我改过的值
      

  16.   

    需要指定是什么模版类型,在列头模式中,没有(TextBox)e.Items.FindControl("Title");
    只可能出现在显示模式或交互模式下的。if (列的模式 == 显示模式 || 列的模式 == 交互模式)
    {}
      

  17.   

    晕,我没怎么用过 DataGrid
      

  18.   

    同意LoveCherry的观点,利用DataGrid的ItemCommand事件是不错的选择。
    你把方法绑定到每一个Button上,创建了一大堆不必要的委托……而DataGrid的ItemCommand事件则是依赖于事件冒泡的……
      

  19.   

    ==============================
    ==============================
    =
    ===============================
    ====================================================================
    如果用Title1.text.trim()可以提取出文本框的值而且不会出错,但不会提取我修改候文本框的值。
    如:我的文本框有个123
    我把他改成1234
    用Title1.text.trim()提取的值是123而不是我要的1234
      

  20.   

    绑定放到if(!IsPostBack){}
    如果不是这样的话,你点击按钮导致postback-》导致重新绑定