ASP.NET自定义控件 第六天 可以绑定数据源的星级控件

1. 引言

以上几个任务里,我们创建了一些简单但很实用的自定义控件,但是它们只能按照固定的设置进行呈现,缺少一些关键的特征——数据绑定和有时为了更灵活的控制以支持模版设置。在ASP.NET数据绑定控件分为三种:

简单数据绑定:简单数据绑定将一个对象与某个控件的属性绑定在一起。数据源只是绑定单个数据项,而不是绑定一个数据项列表。简单数据绑定使用数据绑定表达式完成,数据绑定表达式是用<%#...%>封装的任何可执行代码。

列表控件:列表控件是通过一个固定不变的用户界面显示一个数据项列表的控件。常见的列表控件包含RadioButtonList控件、CheckBoxList控件和ASP.NET2.0中新引入的BulletedList控件。

复杂数据绑定:复杂数据绑定控件通常是显示一组数据项的组合控件,它们有着灵活的呈现机制,例如GridView控件就是一个复杂数据绑定控件。

为了使星级控件在使用时能够通过某个数据源显示数据,需要使该控件拥有数据绑定的能力,使用时数据绑定方法代码看起来可能如下所示:

private void BindData()
{
DataTable table = new DataTable();
DataColumn col = new DataColumn("Comment",typeof(string));
table.Columns.Add(col);
col = new DataColumn("Score",typeof(int));
table.Columns.Add(col);
DataRow row = table.NewRow();
row[0] = "Vista";
row[1] = 3;
table.Rows.Add(row);
table.AcceptChanges();
star.DataSource = table;
star.DataTextField = "Comment";
star.DataValueField = "Score";
star.DataBind();
}

2. 分析

在开始列表控件之前再来讨论一下简单数据绑定,前几次开发的星级控件就是一个简单数据绑定控件,我们直接可以为他的某个属性使用数据绑定表达式赋值,例如在StartTest.aspx中编写如下代码使用自定义控件:

<cc:Star ID="star" runat="server" Score="4" Comment="<%#DateTime.Now%>" Font-Size="12px" />

在页面中预览——很不巧,当前日期并没有显示在页面上,这是由于在页面中定义的任何数据绑定表达式,只有在调用DataBound方法之后才会进行计算。我们有多种选择,既可以调用页面对象(Page)的DataBind方法,也可以调用具体控件上的DataBind方法,实际上,如果调用页面对象上的DataBind方法,它将递归的调用页面中定义的所有控件上的DataBind方法。这就意味着,如果页面上使用了多个数据绑定表达式,最好还是通过调用Page.DataBind方法执行数据绑定。

如果想了解在数据绑定时底层究竟执行了什么操作,可以打开ASP.NET的调试功能,并改变临时文件目录,修改web.config中complcation配置节如下所示:

<compilation debug="true" tempDirectory="c:\web">
…… ……
</complation>

时间: 2024-12-01 07:06:07

ASP.NET自定义控件 第六天 可以绑定数据源的星级控件的相关文章

ASP.NET自定义控件 第五天 真正可以评分的星级控件

1. 引言 在前几次任务里开发的星级控件仅适用于静态展示,例如标明某个软件的受欢 迎度,但是实际上很多网站还希望能够由用户对某一信息进行评分,最终计算出 该信息的受欢迎程度,使数据更为客观和可信,由此需要在原有的星级控件上加 以改进,使用户能够动态评分,实际的效果图看起来如下图所示: 图中第一行是经过评分后控件的状态,开发人员处理了评分事件并在页面输出 了选择的分数:图中第二行显示了另外一种评分状态--鼠标移动到了星形图案 上,此时使用红色的星形提示用户. 2. 分析 对于该控件我们要在原有控件

ASP.NET自定义控件 第三天 使用控件状态的星级控件

引言 正如在前两个任务中所看到的,我们使用视图(ViewState)保存自定义控件 属性,ViewState实际上是一个StateBag对象,开发人员使用键/值的方法向视图 中保存或读取设置,最终发送给用户的HTML页面中会包含一个隐藏域,该隐藏域 中保存了经过序列化后的值.如果过分使用视图的话,会导致页面急剧增大,虽 然现在网络带宽已经不是限制条件,但这仍然是一个不太好的设计,因此开发人 员有时会禁用视图状态. 对于自定义控件来说,如果禁用视图状态可能导致控件不能够正常工作,读者 可以使用第一

ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇

前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事 件是行不通.如果大家开发的是WinForm中的事件,之前的定义可能没有什么大的问题,只是在效率方法 欠考虑而且,还是可以运行的. 下面我们就回到ASP.NET中的事件. 大家也许看了我们之前定义的事件,确实,事件一般是那么定义的,但是那样定义事件后的,运行起 来的效率不搞,因为那样定义事件后,编译器在编译事件代码的时候,会自动的为我们加入很多多线程安 全的代码,就是说,虽然我们只是定义几行代码,大但

ASP.NET自定义控件 第一天 简单的星级控件

1. 引言 我们经常会在网页上看到使用星形图案表示对某个软件或某篇文章的评价,通 常以五个星形作为最高标准,指定的等级对应使用实心填充,如图1-1所示,在学 习ASP.NET自定义控件的第一天,我们将开发这样的自定义控件. 2. 分析 可以看到这样的一个自定义控件包含两部分:显示的文本和包含两种图案(实 心和空心星形)的图片,为了呈现出这样的结果,最方便的就是将这两部分放到 包含一行两列的表格中.接下来要考虑的就是如何根据评分显示若干实心和空心 星形. 看到这个图案的第一个想法可能就是根据评分首

ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三 个基类:Control,WebControl,还有一个就是今天要说的CompositeControl. 大家也许还记得,之前的开发的控件基本上都是我们自己从头到尾的写一些控件的标记,如 <table.....>之类的,而且还有一个大的问题:我们为了使得我们的控件更加的好用,专业,我们 还实现了大量的接口,和自己写很多的事件.这样开发控件的时间就加大了.其实我们可以利用ASP.NET中 已经有的控件,经过我

ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇

好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点 :添加事件. ASP.NET的开发都是事件驱动的,现在我们就来为控件添加事件.在说事件之前,希望大家对C#的语法 要熟悉,对委托很事件要懂. 其实定义事件的步骤很简单: 1.声明一个委托. 2.定义一个携带事件信息的类. 3.定义事件4.定义一个通事件发生后,通知其他对象的方法首先来理清一下我们的思路: 1.在下拉框中选中一个值,并且在输入框中也输入相应的值. 2.我们在页面点击"提交"按钮,按钮

ASP.NET自定义控件组件开发 第五章 模板控件开发

大家好,我们今天来开发一个模板控件. 其实开发一个模板控件比开发一个组合控件更加简单,所以这章不难. 开发一个模板控件一般都继承CompositeControl,因为继承这个基类后,我们就省却了很多的麻烦. 所以本章我们开发的模板控件也继承于CompositeControl.大家应该还记得我们上章开发那个登录Login 控件吧,如下: 以上就是我们之前开发的登录控件,现在我们来改造它.我们的现在的这个登录控件的输入用户名和 密码的控件是TextBox,我们有时候可能想把TextBox 换成Dro

ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇

事件冒泡 我们上一篇已经开发一个登录的组合控件,但是我们把控件的事件的这个问题没有解决,现在我们就 来看看这个问题. 因为我们的组合控件Login是由一些已经存在的服务器控件的组合的,这样就省却了我们很多的麻烦, 上篇中我们已经把子控件的一些属性,如Text等,显示呈现为了组合控件的属性.我们将之称为"属性的 冒泡"(我自己这样认为的). 我们现在来想下:其实我们点击"提交"按钮,我们就想把控件中信息发送给服务器,然后验证.即 ,我们点击的是"提交&quo

ASP.NET自定义控件 第二天 带有自定义样式的星级控件

引言 在上个任务里,通过继承WebControl类创建了一个简单的星级控件,并且也可 以设置字体边框等相关样式,但是需求马上又来了,如果我们想加入自定义的样 式,例如希望文本可以自由显示到图案左边或下边,如下图所示,对于这样的要 求怎么办? 图2-1 文字显示到下方的星级控件 分析 看到上方的图形,很容易想到为第一个任务里的Star类添加一个属性,标识是 在左面还是下面显示文本,这的确能够解决现有的问题,但如果过一阵子希望能 够设置标签文本的颜色怎么办,很容易,再添加一个属性,具有敏锐眼光的读者