以下给部分代码,行家一看就懂的: 
<asp:DataList   ID= "DataList1 "   runat= "server "   DataKeyField= "ColumnId " 
  .... 
    <td   colspan= "3 " > 
                                                                        
        <asp:GridView   ID= "GridView1 "   runat= "server "     DataKeyNames= "TextId "   AutoGenerateDeleteButton= "True " 
            ... 
现在是这样,我在作为子控件的GridView1里开了删除功能,也就是上面的属性:AutoGenerateDeleteButton= "True " 当我单击 "删除 "按钮,执行删除操作时,执行以下方法(系统自己给的,呵呵): protected   void   GridView1_RowDeleting(object   sender,   GridViewDeleteEventArgs   e) 
        { 
                
                
                
                GridView   newGridView   =   (GridView)this.DataList1.FindControl( "GridView1 "); 
                string   textid   =   newGridView.DataKeys[e.RowIndex].Value.ToString();//取得当前发生行的主键值 
        .... 
        } 
嗯,就是当我取子控件里的当前发行事件的记录行的主键值时,就显示出错了,说什么 "没有用NEW给对象引用 "之类的. 
string   textid   =   newGridView.DataKeys[e.RowIndex].Value.ToString();//取得当前发生行的主键值 
这个语句我也不知道对不对,我靠VS的智能感知来写出来的,可能取当前发生行的值不是这样写,哪位朋友懂啊? 
上次我第一次发贴时,有好心人帮解答,虽然没有把问题解决,但是我非常感谢“JGood”,我的分不多,等我解决这个问题后,如果我系统里还有分,我会把http://topic.csdn.net/u/20071030/01/F4F89B83-3DAA-4D51-B08F-A3EA369AFA7C.html这个贴给结了,我也知道,在这里赚分不容易。只要问题能解决,贴子肯定结,这次加到50分。

解决方案 »

  1.   


    GridView是嵌套的,所以GridView1是在DataList的某个DataListItem之下的,所以this.DataList1.FindControl(   "GridView1   ");   返回的是null你不需要得到当前对象所在的GridView,你可以用e.Keys来访问你要的数据,或者把sender转换成 GridView:GridView newGridView = (GridView)sender;   
      

  2.   

    LS分析得很对. sender这个聋子的耳朵在这还是派上用场了呵呵.
      

  3.   

    string textid = ((GridView)sender).DataKeys[e.RowIndex].Value.ToString();//
      

  4.   

    (GridView)this.DataList1.FindControl(   "GridView1   ")
    但从表面意思理解:从整个datalist直接寻找gridview
    和你要删除的那行扯不上什么关系吧?
      

  5.   

    呵呵,真高兴,这是项目的最后一个问题了,现在大家帮我解决了。上次问时,有人帮说了,sender是GridView中的一个Button,其parent是GridView的一个Row,可能那时他也没有细看
    void       GridView1_RowDeleting(object       sender,GridViewDeleteEventArgs       e)  GridView1_RowDeleting 原来sender的父控件是GridView,不是Button,怪不得我老是转换不成功。