|
虽然用 DataList 进行内联编辑不是很困难,但是 DataList 的数据排序、分页和编辑却很困难。 虽然一些灵活的编码肯定能完成这样的功能,但是向 DataList 中添加这样的功能将花费相当多的开发时间。 因此,如果最终用户能对数据进行排序和分页是一个必需要求的话,那么最好选择 DataGrid 而不选择 DataList。DataList 的性能比 DataGrid 的性能好,当 DataList 位于 Web 窗体内时这一点更明显。 图 2 显示了 Web Application Stress Tool 在 DataList 上的测试结果。 图 2: DataList 的每秒请求数 正如图 2 中的结果显示的那样,当 DataList 放置在 Web 窗体内时(因此导致该 Web 控件生成它的 ViewState),该 Web 控件要远胜于 DataGrid。 返回页首 深入研究 Repeater 在所有这三个数据 Web 控件中,Repeater Web 控件在呈现的 HTML 里提供了最大的灵活性。 DataGrid 或 DataList 会在预设的 HTML 标记中自动包含开发人员指定的内容。与它们不同的是,Repeater 在呈现的时候将严格生成指定的 HTML 标记。 因此,如果不想用 HTML <table>或者一系列 <span> 标记显示数据,而希望以其他方式显示数据,就必须使用 Repeater 控件。 就像 DataList 一样,使用 Repeater 时要用模板指定标记。 Repeater 包含下列五个模板: AlternatingITemTemplate FooterTemplate HeaderTemplate ITemTemplate SeparatorTemplate HeaderTemplate 和 FooterTemplate 指定出现在绑定到 Repeater 的数据之前和之后的 HTML 标记。 AlternatingItemTemplate 和 ITemTemplate 指定用于呈现 Repeater 的 DataSource 中的每条记录的 HTML 标记和数据绑定语法。 例如,假设您要把包含雇员信息的数据集绑定到 Repeater,该数据集的其中一个字段是 EmployeeName。 如果要在 Web 页上以无序列表的形式显示雇员列表,则可以使用如下 Repeater 语法: <asp:Repeater runat="server" id="rptEmployees"> <HeaderTemplate> <ul> </HeaderTemplate> <ItemTemplate> <li><%# DataBinder.Eval(Container.DataItem, "EmployeeName") %></li> </ITemTemplate> <FooterTemplate> </ul> </FooterTemplate></asp:Repeater> 与 DataGrid 和 DataList 不同,Repeater 类不是从 WebControl 类派生的。 因此,Repeater 缺少 DataGrid 和 DataList 二者共有的样式属性。 这一点归结起来无非是说,如果想对 Repeater 中所显示数据进行格式设置,则必须在 HTML 标记中进行这样的操作。 例如,在上面的例子中,如果想用粗体显示雇员的姓名,则必须更改 ITemTemplate 以包含 HTML 粗体标记,就像下面这样: <ItemTemplate> <li><b><%# DataBinder.Eval(Container.DataItem, "EmployeeName") %></b></li></ITemTemplate> 然而对于 DataGrid 或 DataList,通过把控件的 ITemStyle-Font-Bold 属性设置为 True,就能用粗体显示文本了。Repeater 缺少样式属性会大大增加开发的时间指标。 例如,假设决定使用 Repeater 显示数据,这些数据需要以粗体、中间对齐且带有特定背景色的特定字体显示。 所有这些都要用几个 HTML 标记指定,这些标记很快就会使 Repeater 的模板变得凌乱不堪。 这种凌乱会使以后对外观进行更改变得困难得多,尤其是当其他人对该项目进行操作时,则不得不查看大量 HTML 语法。 将这一点与为 DataGrid 或 DataList 指定格式进行比较。 对于这两个控件中的任何一个,都可以通过指定 DataGrid 或 DataList 的样式属性来使模板免于凌乱。 此外,可以用一些工具来自动设置 DataGrid 和 DataList 的样式属性,例如 Microsoft Visual Studio .NET 或 ASP.NET Web Matrix。除了延长开发时间之外,Repeater 还缺少有助于支持分页、编辑或数据编辑的内置功能。 由于缺少这些功能支持,Repeater 在可用性的评定中得分很低。 当然,如果 所有您感兴趣的只是显示数据,而不用带任何别致的铃声或口哨声,那么 Repeater 的功能匮乏就不是主要缺点了。 我之所以强调"如果"一词是因为,通常,Web 应用程序一旦进行了部署,用户就会发现他们需要附加的功能,例如排序、分页和编辑。Repeater 有一个弥补性的品质(这并不令人吃惊),那就是性能。 Repeater 的性能比 DataList 的性能稍微好一点,比 DataGrid 的性能要好很多。图 3 显示了Repeater 每秒能处理的请求数,并与 DataGrid 和 DataList 进行了对比。 图 3: Repeater 的每秒请求数 返回页首 小结 在 ASP.NET Web 页面中显示数据时,很多开发人员都选择他们最熟悉的数据 Web 控件,通常是 DataGrid。 但是这样的盲目决定不够明智,因为根本没有通用的"最好的"数据 Web 控件。 决定为给定的 Web 页使用哪个数据 Web 控件时,应该先就以下各种问题自己考虑一下,以确定哪个控件最适合手边的任务。 您想允许用户对数据进行排序吗? 需要把数据用非 HTML <table> 的格式显示吗? 页面会被大量访问吗,因而性能是一个关键的问题吗?因为 DataGrid 能允许最终用户排序、分页和编辑它的数据,所以这三个数据 Web 控件中 DataGrid Web 控件提供了最好的功能集。 因为使用 DataGrid 时只需要把它添加到 Web 页面中并写几行代码,所以 DataGrid 也是最简单易用的数据 Web 控件。 但是,容易使用和强大的功能是要付出代价的,如性能的代价: DataGrid 是三个数据 Web 控件中效率最低的,特别是当把它放置在 Web 窗体中时。通过使用模板,DataList 对显示的数据外观提供了比 DataGrid 更多的控制。 但是,使用模板通常比使用 DataGrid 的列类型需要更多的开发时间 DataList 还支持数据的内联编辑,但是实现起来需要的工作量比 DataGrid 多。 遗憾的是,在 DataList 中提供分页和排序支持不是一件简单的事。 DataList 比 DataGrid 提供了更好的性能,从而弥补了这些缺少的内置功能。最后,Repeater 控件允许对呈现的 HTML 标记进行完整和全面的控制。 对于 Repeater,生成的唯一 HTML 是模板中数据绑定语句的值和模板中指定的 HTML 标记,而不会生成象 DataGrid 和 DataList 那样的"额外"HTML。 由于要求开发人员指定完整生成的 HTML 标记,所以通常 Repeater 需要的开发时间最长。 而且,Repeater 不提供内置编辑、排序或分页支持。 但是,Repeater 的性能确实是这三个数据 Web 控件中最好的。 它的性能可与 DataList 相比,但明显比 DataGrid 好。祝大家编程愉快! 上一页 [1] [2] [3] [4] |