日期:2014-05-19  浏览次数:20403 次

~~~~~~~~~~~自定义控件开发问题~~~~~~~~~~~~~~
自定义控件有个属性TargetConrol,     设置其值为页面上另一个控件的ID字串.    
比如这样设置:     TargetControl     =     "GridView1 "后,        
在自定义控件中,     可以这样得到GridView的引用:    
GridView     gv     =     (GridView)this.FindControl(TargetControl);    
 
那么这时用列名的方式访问GridView中的数据:    
string     str     =     ((System.Data.DataRow)gv.Rows[0].DataItem)[ "CategoryID "].ToString();    
或    
string     str     =     gv.Rows[0][ "CategoryID "].ToString();    
都编译错误或取不到值,     GridView是肯定有数据的.

说明一点:
在GridView重写事件和页面中用以上方法是可以取到值的,   但在我的自定义控件
中却取不到.    
     
并且把这些代码放到几个事件中都编译不通过.    
 
另外,   用gv.Rows[0].Cells[1]是可以访问的,   但这里一定要用列名(如:     CategoryID)访问GridView中的数据.    
 
请问应该在什么事件中?     怎样写代码可以用列名的方式访问GridView中的数据?    


Thanks/King




------解决方案--------------------
占个座先
------解决方案--------------------
up 目前没环境不能调试
------解决方案--------------------
GridView gv = (GridView)this.FindControl(TargetControl);
会不会是这处得到的控件就为空,或者不是你指定的控件呢?
------解决方案--------------------
学习
------解决方案--------------------
thanks
------解决方案--------------------
TargetControl 没有保留数据把。
------解决方案--------------------

------解决方案--------------------

------解决方案--------------------
从“在自定义控件中, 可以这样得到...(GridView)this.FindControl(TargetControl); ”一直到楼上的回帖,我是越看越乱,不知道有没有喜欢简洁准确的逻辑的人。

自定义控件里使用 this 可以找到“页面上另一个控件”?
------解决方案--------------------
在GridView重写事件和页面中用以上方法是可以取到值的, 但在我的自定义控件
中却取不到.
——————————————————————————————————————————
这里我也不理解什么叫做“GridView重写事件”。页面中的GridView的事件处理程序(由GridView触发所执行的实践处理方法)是页面上的方法,不是GridView的方法,根本不是GridView中的事件而是GridView事件触发的代理方法。更不能说事件方法是重写了什么方法,没有重写什么。我想基本概念问题很可能造成你对this到底是什么对象(“我是谁”)的理解错误。