欢迎您来到中国万网客户服务中心!
客服导航
如果您在使用我们的产品中遇到问题,建议您首先在“常见问题”中查询解决方法;
如果没有找到该问题的解决方法,您可以在“问题搜索”中进行搜索;
如果搜索后没有找到满意答案,您可以“在线提问”,我们会在1个工作日内给您答复。
您现在的位置: 中国万网客服中心 >> 常见问题 >> 软件常见问题 >> ASP.NET程序模板 >> 文章正文

web 窗体数据访问和自定义

作者:客服中心    文章来源:本站原创    点击数:    更新时间:2006-2-24


模板控件介绍

虽然上一节中说明的 DataGrid 服务器控件对许多适于采用网格样式数据表示形式的 Web 应用程序方案很适合,但许多情况下,数据表示形式需要丰富得多。ASP.NET 提供两个控件 DataListRepeater,这两个控件为呈现列表样式的数据提供了更大的灵活性。这些控件基于模板,因此没有自己的默认呈现形式。数据的呈现方式完全取决于控件模板的实现,而控件模板描述如何表示数据项。

DataGrid 控件一样,DataListRepeater 也支持 DataSource 属性,该属性可设置为任何 ICollectionIEnumerableIListSource 类型。此 DataSource 中的数据通过其 DataBind 方法绑定到控件。绑定了数据后,每个数据项的格式都由模板描述。

ItemTemplate 属性控制 DataSource 集合中每一项的呈现形式。在 ItemTemplate 内,可以定义任何任意表示代码(HTML 或其他)。使用 ASP.NET 数据绑定语法,可以将数据绑定中的值插入 DataListRepeater 控件,如下例所示。



    
        Hello <%# DataBinder.Eval(Container.DataItem, "name") %> !
    


Container 表示直接层次结构中支持 System.Web.UI.INamingContainer 标记接口的第一个控件。本例中,Container 解析为 System.Web.UI.WebControls.RepeaterItem 类型的对象,而该类型具有 DataItem 属性。当 Repeater 在 DataSource 集合上迭代时,DataItem 随之包含该集合的当前项。例如,如果将数据源设置为 Employee 对象的 ArrayList,则 DataItem 是 Employees 类型。当绑定到 DataView 时,DataItemDataRowView 类型。

下面的示例说明绑定到 DataView(从 SQL 查询返回的)的 Repeater 控件。还定义了 HeaderTemplateFooterTemplate,它们分别在列表的开头和末尾呈现。

 
C# DataList1.aspx

[查看源代码]

Repeater 控件只是在绑定数据上迭代,为 DataSource 集合中的每一项呈现一次 ItemTemplate。除了其模板中包含的元素外,它不呈现任何内容。Repeater 是一个通用用途的迭代程序,而 DataList 提供了一些控制列表布局的附加功能。与 Repeater 不同,DataList 呈现模板定义外的其他元素(如表行及包含样式属性的单元格和跨距),以启用这种更丰富的格式设置。例如,DataList 支持 RepeatColumnsRepeatDirection 属性,这两个属性指定数据是否应在多列中呈现,以及数据项的呈现方向(垂直方向或水平方向)。DataList 还支持样式属性,如下例所示。


    ...

注意:本节的其余部分集中描述 DataList 控件的许多功能。有关 Repeater 控件的更多信息,请参考本教程 Web 窗体控件引用一节中的 Repeater 主题。

下面的示例说明 DataList 控件的用法。注意上一示例中的数据项外观已更改,仅仅是通过更改控件的 ItemTemplate 属性的内容。RepeatDirectionRepeatColumns 属性确定 ItemTemplates 的布局。

 
C# Datalist2.aspx

[查看源代码]

下面的示例通过再次更改 ItemTemplate 进一步说明模板的无限灵活性。这一次,DataItem 的一个值已替换为 标记的"src"属性。DataBinder.Eval格式 String 参数也已用于将查询字符串中的 DataItem 值替换为 URL。

 
C# Datalist3.aspx

[查看源代码]


从模板处理回发

DataGrid 中一样,可以从 DataList 模板内激发传递到与 DataList 本身连接的事件处理程序的命令。例如,ItemTemplate 内的 LinkButton 可以激发 Select 命令。通过设置 DataListOnSelectedIndexChanged 属性,可以调用事件处理程序响应此命令。下面的示例说明此过程。



    

        
            <%# DataBinder.Eval(Container.DataItem, "title") %>
        

    


下面的示例说明此代码的运行。在 MyDataList_Select 事件处理程序中,用特定选定项的详细内容填充其他若干服务器控件。

 
C# Datalist4.aspx

[查看源代码]

注意,虽然 DataList 识别少数特殊命令(如 SelectEdit/Update/Cancel),但是在模板内激发的命令字符串可以是任意字符串。对于所有命令都激发 DataListOnItemCommand。如前例所示,可以将该事件与处理程序连接。下面的示例说明如何完成此操作。





    

        
            View Ratings
        
        |
        
            View Discussions
        

    


C# VB JScript  

注意,因为可以有不止一个命令激发此事件处理程序,所以必须使用 switch 语句确定具体激发的命令。下面的示例说明此代码的运行。

 
C# Datalist5.aspx

[查看源代码]


使用选择模板和编辑模板

除了使用页级别事件处理程序处理 Select 命令外,DataList 还可以在内部响应此事件。如果为 DataList 定义了 SelectedItemTemplate,则 DataList 为激发了 Select 命令的项呈现此模板。下面的示例使用 SelectedItemTemplate 使所选书的书名成为粗体。

 
C# Datalist6.aspx

[查看源代码]

DataList 还支持一个 EditItemTemplate 来呈现索引等于 DataListEditItemIndex 属性的项。有关如何编辑和更新工作的详细信息,请参考本教程数据访问一节中的更新数据主题。

 
C# Datalist7.aspx

[查看源代码]


查找模板内的控件

有时有必要查找模板内包含的控件。如果在模板中给控件赋予了一个 ID,则可以从其容器(父层次结构中支持 INamingContainer 的第一个控件)中检索此控件。本例中,容器是 DataListItem 控件。注意,即使若干控件具有同一 ID(由于 DataList 的重复),每个控件在逻辑上也包含在 DataListItem 容器控件的命名空间中。

可以在 DataListItems 集合中遍历以检索给定索引的 DataListItem,然后调用 DataListItemFindControl 方法(从基 Control 类继承)检索具有特定 ID 的控件。





    
          Save to Favorites
    


C# VB JScript  

下面的示例说明此代码的运行。

 
C# Datalist8.aspx

[查看源代码]

本节小结

  1. DataListRepeater 控件为开发人员提供了对呈现数据绑定列表的微调控件。
  2. 使用模板(如 HeaderTemplateFooterTemplateItemTemplate)控制绑定数据的呈现。
  3. Repeater 控件是通用用途的迭代程序,不在呈现中插入模板中不包含的任何内容。
  4. DataList 控件对项的布局和样式提供更多的控制,并为格式设置输出自己的呈现代码。
  5. DataList 支持 SelectEdit/Update/CancelItemCommand 事件。通过将事件处理程序与 DataListCommand 事件连接,可以在页级别处理这些事件。
  6. DataList 支持 SelectedItemTemplateEditItemTemplate 来控制选定项或可编辑项的呈现。
  7. 可以使用 Control.FindControl 方法以编程方式从模板检索控件。这应在从 DataList 的 Items 集合中检索的 DataListItem 上调用。

返回上一页
中国万网旗下网站:中国万网 买麦网
Copyright © 2007 中国万网 版权所有
推荐使用1024×768分辨率浏览,并关闭窗口弹出阻止程序