推荐.NET教程:
ASP.NET
C#
开发环境
Ajax教程
控件开发
统计报表
数据库
Web服务
安装部署
CommunityServer
NHibernate
DataGrid/GridView
实用代码
VS2005
示例源码
MVC/三层
SqlHelper
入门源码
开源
CMS
Ajax/Atlas
C#.net
毕业设计
源码
经典代码
商业
本站作品
持久层
随书源码
WebService
英文/汉化
Asp.net2.0
阿牛·乐园
每天进步一点点
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
::
80 随笔 :: 14 文章 :: 389 评论 :: 13 引用
2007年4月9日
#
如此自动绑定数据到WebUI
把数据绑定到控件,不知道大家用哪种方法?
很早之前,我一般在aspx中放置控件,在后台的代码中用代码直接给相应的控件设置属性的值。这样的方法优点是灵活,可以依据业务逻辑,灵活的设置控件的Text以及Visible。示例如下:
<
table
>
<
tr
>
<
td
>
用户名
</
td
>
<
td
>
<
asp:TextBox
ID
="tbName"
runat
="server"
></
asp:TextBox
>
</
td
>
</
tr
>
</
table
>
然后后台里写代码:
protected
User OperData
{
get
;
set
;
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(
!
Page.IsPostBack)
{
this
.tbName.Text
=
OperData.Name;
}
}
不久之前,我发现在写好多字段的如果都这样写的话,会很累的,虽然效率会很高。所以我尝试采用如下的方式:
尽可以的避免在代码中直接写来给控件属性设置值,而通过前台的绑定来实现,如:
<
asp:TextBox
ID
="TextBox1"
runat
="server"
Text
='<%#OperData.Name
%
>
'>
</
asp:TextBox
>
不过,这样的话,在后台也应该至少有一句绑定操作,像这样:
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(
!
Page.IsPostBack)
{
this
.DataBind();
}
}
虽然绑定上了,但这里有一个问题,我们的页面上的控件,不是都是在 !Page.IsPostBack这个条件的时候要绑定,也许还要有别的要求。还有,既然已经Page.IsPostBack也是条件,我们要是不用在后台代码里写this.DataBind不是更好吗?
其实,说难也不难,我们来实现一个控件,这个控件用来自动绑定,且分条件的绑定。下面看下代码:
namespace
Iyond.Web.UI.WebControls
{
public
class
NullPanel : Panel
{
private
bool
_autoBind
=
true
;
public
override
void
RenderBeginTag(System.Web.UI.HtmlTextWriter writer)
{
//
因为NULL吗,所以什么也不输出
//
base.RenderBeginTag(writer);
}
public
override
void
RenderEndTag(System.Web.UI.HtmlTextWriter writer)
{
//
因为NULL吗,所以什么也不输出
//
base.RenderEndTag(writer);
}
protected
override
System.Web.UI.HtmlTextWriterTag TagKey
{
get
{
return
System.Web.UI.HtmlTextWriterTag.Unknown;
}
}
[DefaultValue(
true
)]
public
bool
AutoBind
{
get
{
return
_autoBind;
}
set
{
_autoBind
=
value;
}
}
protected
override
void
OnLoad(EventArgs e)
{
base
.OnLoad(e);
//
重置显示属性,好引发 OnPreRender
this
.Visible
=
true
;
}
protected
override
void
DataBindChildren()
{
//
分条件绑定子控件,条件就是:
if
(
this
.Visible
&&
this
.AutoBind)
{
base
.DataBindChildren();
}
}
protected
override
void
OnPreRender(EventArgs e)
{
//
在这里,我们要给数据绑定数据,不知道这个位置是不是最好
if
(
this
.AutoBind)
{
this
.DataBind();
}
base
.OnPreRender(e);
}
}
}
有了上面这个控件,我现在可以像下面一样写代码:
<
asp:NullPanel
ID
="panelFenInfo"
runat
="server"
Visible
='<%#this.IsEditMode%
>
' >
<
asp:TextBox
ID
="tbName"
runat
="server"
Text
='<%#this.OperData.Name
%
>
'>
</
asp:TextBox
>
<
asp:NullPanel
>
<
asp:NullPanel
ID
="panelInfo"
runat
="server"
Visible
='<%#!Page.IsPostBack%
>
' >
<
asp:TextBox
ID
="tbCompany"
runat
="server"
Text
='<%#this.OperData.Name
%
>
'>
</
asp:TextBox
>
<
asp:NullPanel
>
后台代码,这时就不用写了。
写到这里,不知道大家看明白没有,我的文笔可真差,希望大家多在评论中指出。
posted @
2007-04-09 16:28
阿牛 阅读(2448) |
评论 (6)
|
编辑
<
2007年4月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(5)
给我留言
查看留言
我参与的团队
O/R Mapping团队(0/213)
我的标签
NHibernate IQuery Builder 生成
(1)
CSS DIV Header Footer Body Jquery
(1)
随笔分类
(116)
ASP.net(29)
(rss)
BAT(1)
(rss)
C#(26)
(rss)
C++(10)
(rss)
DHTML,JS(21)
(rss)
Java(3)
(rss)
TSQL(6)
(rss)
工作流(1)
(rss)
其它语言(6)
(rss)
生活(13)
(rss)
随笔档案
(80)
2008年12月 (3)
2008年11月 (5)
2008年10月 (1)
2008年5月 (1)
2008年3月 (1)
2007年12月 (2)
2007年11月 (2)
2007年9月 (1)
2007年8月 (5)
2007年7月 (9)
2007年6月 (6)
2007年5月 (5)
2007年4月 (5)
2007年3月 (8)
2006年11月 (2)
2006年9月 (1)
2006年8月 (4)
2006年7月 (4)
2006年6月 (2)
2006年5月 (2)
2006年4月 (7)
2006年3月 (2)
2005年11月 (2)
文章分类
(25)
ASP(2)
(rss)
ASP.NET(2)
(rss)
C#(3)
(rss)
CSS(1)
(rss)
DHTML,JS(7)
(rss)
MSSql(4)
(rss)
VC/C++(1)
(rss)
收藏(5)
(rss)
文章档案
(14)
2007年7月 (1)
2006年11月 (1)
2006年9月 (3)
2006年5月 (1)
2006年3月 (2)
2005年11月 (6)
收藏夹
(32)
C#(10)
(rss)
Database(2)
(rss)
javascript(3)
(rss)
Log4Net(3)
(rss)
Remoting(3)
(rss)
报表
(rss)
创业(4)
(rss)
工作流(4)
(rss)
网页(3)
(rss)
友情链接
asp.net源码下载站
很不错的asp.net源码下载站
DotNet新闻及文章中心
很不错的DotNet新闻及文章中心
Scott Guthrie's Blog on ASP.NET and .NET
Scott Guthrie's Blog on ASP.NET and .NET
scottgu
(rss)
宝玉的blog
(rss)
专注于web开发技术
创造机会的人是勇者;等待机会的人是愚者
EPZUZU.COM-创造机会的人是勇者;等待机会的人是愚者
海东的技术资料
(rss)
鸟食轩
(rss)
软件测试
(rss)
软件测试领域的交流平台
㊣点滴伊飏
(rss)
㊣点滴伊飏
紫雨轩
(rss)
破文
最新随笔
1. HqlBuilder之二(使用AspNetPager分页控件)
2. 遭遇:TargetException: 对象与目标类型不匹配。
3. 让全站的页面不能前进和后退
4. Ajax.net实现的动态输入项
5. 转:RBAC的解释
6. HqlBuilder
7. CSS布局-有头有尾左中右三分
8. ValueCheckBox
9. 我的求职简历
10. 在Excel中检验身份证号
积分与排名
积分 - 94683
排名 - 462
最新评论
1. re: VS2005打开项目无响应,和CSC.exe进程有关?
@shafo1
我换成VS2008了,哈哈
--阿牛
2. re: VS2005打开项目无响应,和CSC.exe进程有关?
这个问题最终怎么解决的,我遇到同样的问题了
--shafo1
3. re: HqlBuilder
我觉得不如直接用Criteria查询.
--Karron Qiu
4. re: 我的求职简历
努力向楼主看起
--上不了岸的鱼{ttzhang}
5. re: 第一个asp.net的workflow例子
好东西
--tujiang
阅读排行榜
1. 验证码的思考,你的验证码安全吗?(4285)
2. 图片服务器上图片的管理网站上传与前台显示(3936)
3. 移动的验证码安全问题告诉移动网站后......,1860意指一般人不会这样做.(3743)
4. 超级简单的Region对比识别验证码(3129)
5. [原创]利用HttpModuler实现WEB程序同一时间只让一个用户实例登陆(修改)(3066)
评论排行榜
1. 验证码的思考,你的验证码安全吗?(42)
2. 今天是公历6.19,我女儿的第一个生日,也是全国人民的大节日,端午节快乐(40)
3. 移动的验证码安全问题告诉移动网站后......,1860意指一般人不会这样做.(29)
4. 用控件的方式解决问题-在客户端关联WEB控件引用(28)
5. 发现移动太NB了,验证码图像路径直接包含验证码(25)
60天内阅读排行
1. HqlBuilder之二(使用AspNetPager分页控件)(1171)
2. 遭遇:TargetException: 对象与目标类型不匹配。(956)
3. 我的求职简历(485)
4. HqlBuilder(476)
5. Ajax.net实现的动态输入项(154)