Mar 13, 2007

关于用户控件的若干体会

昨天今天都在被用户自定义控件给困扰着,搜索了网上若干不甚明了的帖子,终于实现了我要的功能。介绍如下,希望能给若干受到这方面问题困扰的兄弟姐妹以帮助。(语言为C#)
(一)aspx页面改变ascx页面的控件属性。
例如:Index.aspx中引入了一个名为Test.ascx的控件
<%@ Register TagPrefix="Test" TagName="TT" Src="Test.ascx" %>
这其中,TagPrefix是用户控件的命名空间,而TagName是用户控件的名字。这样可以在同一个空间中使用多个同样的控件,如Test,Test1等等。
现在Test.ascx中有一个Label例如名为lblUse,如何在aspx中取到这个控件的text值呢?主要有两步。
第一步,在Test.ascx中写一个public的属性。
public string PassText{
get{ return lblUse.Text;
}
set{ lblUse.Text=value; }
}
第二步,在Index.aspx中插入用户自定义控件
头部:
<%@ Register TagPrefix="Test" TagName="Test" Src="Test.ascx" %>
Html文件中写:
记得要给这个控件取一个id,这里叫TT1。
中写你要赋给的值如"Hello":
TT1.PassText="Hello";
取值的话:string myText=TT1.PassText
这样在ascx中的lblUse标签的名字就自动变成Hello了。
(二)在aspx中取到ascx中的控件
方法也很简单:
在aspx中写ascx中那个控件的类型,例如在上面讲的Test.ascx中有一个按钮,名字叫btnTest.
在aspx的中写
Button myButton=new Button();
myButton=(Button)TT1.FindControl("btnTest");
//现在就可以操作myButton了。例如让myButton置灰
myButton.Enabled=false;
在ascx中btnTest也变灰了。原因就在于,myButton和btnTest指向的是同一块内存空间,这就是对象引用的一个不错的用法。
用这个例子,可以获得DataSet,让DataSet 动态绑定。非常好用。

No comments: