一、Repeater控件的简单示例
这种方式很简单,只需要拖控件,设置它的各项ItemTemplate,将SqlDataSource数据源中的数据手动代码绑定上去就可以了,当然了,这样比较丑,只能查看数据,而且不能做分页等操作。代码如下:
"5">我是头模板 | ||||
"Repeater.aspx?id=<%# Eval("ID") %>"><%# Eval("ID") %> | <%# Eval("sname") %> | <%# Eval("english") %> | <%# Eval("distrubute")%> | <%# Eval("finalpoint") %> |
"red"><%# Eval("ID") %> | "red"><%# Eval("sname") %> | "red"><%# Eval("english") %> | "red"><%# Eval("distrubute") %> | "red"><%# Eval("finalpoint") %> |
"5"> "1pt" /> |
二、Reapter控件的嵌套和分页
嵌套的时候,当然只能手动写它的数据源代码,示例如下:
"5">我是头模板 | ||||
"Repeater.aspx?id=<%# Eval("ID") %>"><%# Eval("ID") %> | <%# Eval("sname") %> | <%# Eval("english") %> | <%# Eval("distrubute")%> |
|
"red"><%# Eval("ID") %> | "red"><%# Eval("sname") %> | "red"><%# Eval("english") %> | "red"><%# Eval("distrubute") %> |
|
"5"> "1pt" /> | ||||
"5" style="font-size:12pt;color:#0099ff;background-color:#e6feda;">
|
请注意在内嵌Reapter控件中的数据绑定方式,和开始略有不同。FooterTemplate模板的两个Lable和四个HyperLink是用来实现分页的,稍后详述。Reapter控件的数据代码绑定方式如下:
注意,其数据绑定只一次,所以使用了if (!IsPostBack)来判断,特别注意上述代码的28行,两个表格的数据相等,而且加到一个关系中,至于内嵌的Reapter控件的数据内容具体是什么,得看内嵌的Reapter控件绑定的是这个关系中的什么数据。
DataSet 类
DataSet 是 ADO.NET 结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成,您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint 和 ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。有关使用 DataSet 对象的详细信息,请参见 使用数据集 (ADO.NET)。
尽管 DataTable 对象中包含数据,但是 DataRelationCollection 允许您遍览表的层次结构。这些表包含在通过 Tables 属性访问的 DataTableCollection 中。当访问 DataTable 对象时,请注意它们是按条件区分大小写的。例如,如果一个 DataTable 被命名为“mydatatable”,另一个被命名为“Mydatatable”,则用于搜索其中一个表的字符串被认为是区分大小写的。但是,如果“mydatatable”存在而“Mydatatable”不存在,则认为该搜索字符串不区分大小写。有关使用 DataTable 对象的更多信息,请参见 创建数据表 (ADO.NET)。
DataSet 可将数据和架构作为 XML 文档进行读写。数据和架构可通过 HTTP 传输,并在支持 XML 的任何平台上被任何应用程序使用。可使用 WriteXmlSchema 方法将架构保存为 XML 架构,并且可以使用 WriteXml 方法保存架构和数据。若要读取既包含架构也包含数据的 XML 文档,请使用 ReadXml 方法。
在典型的多层实现中,用于创建和刷新 DataSet 并依次更新原始数据的步骤包括:
1. 通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。
2. 通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。
3. 调用 GetChanges 方法以创建只反映对数据进行的更改的第二个 DataSet。
4. 调用 DataAdapter 的 Update 方法,并将第二个 DataSet 作为参数传递。
5. 调用 Merge 方法将第二个 DataSet 中的更改合并到第一个中。
6. 针对 DataSet 调用 AcceptChanges。或者,调用 RejectChanges 以取消更改。
SqlDataAdapter类
SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。SqlDataAdapter 通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。更新是逐行进行的。对于每个已插入、修改和删除的行,Update 方法会确定已对其执行的更改的类型(Insert、Update 或 Delete)。根据更改类型,执行 Insert、Update 或 Delete 命令模板将已修改的行传播给数据源。当 SqlDataAdapter 填充 DataSet 时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用 FillSchema,让 SqlDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。有关更多信息,请参见向数据集添加现有约束 (ADO.NET)。
SqlDataAdapter 与 SqlConnection和 SqlCommand 一起使用,以便在连接到 SQL Server 数据库时提高性能。
注意: |
如果使用 SQL Server 存储过程编辑或删除使用 DataAdapter 的数据,请确保不要在存储过程定义中使用 SET NOCOUNT ON。这将导致返回的受影响行数为零,DataAdapter 将其解释为并发冲突。这种情况下将引发 DBConcurrencyException。 |
SqlDataAdapter 还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 TableMappings 属性,以便于数据的加载和更新。
当创建 SqlDataAdapter 的实例时,读/写属性将被设置为初始值。有关这些值的列表,请参见 SqlDataAdapter 构造函数。
InsertCommand、DeleteCommand 和 UpdateCommand 是泛型模板,通过参数机制由来自每个修改行的各个值自动填充。
对于传播给 Update 上的数据源的每一列,应向 InsertCommand、UpdateCommand 或 DeleteCommand 添加一个参数。DbParameter 对象的 SourceColumn 属性将被设置为列的名称。此设置指示该参数值并非手动设置,而是获取自当前处理的行中的特定列。
应用两个Lable和四个HyperLink和Reapter控件的ItemDataBound事件来实现分页,代码如下:
其它的,肯定还有多种分页方式,希望大师或高手能推荐更好的方式分享。