Repeater控件的使用

一、Repeater控件的简单示例

      这种方式很简单,只需要拖控件,设置它的各项ItemTemplate,将SqlDataSource数据源中的数据手动代码绑定上去就可以了,当然了,这样比较丑,只能查看数据,而且不能做分页等操作。代码如下:

  1. "Repeater1" runat="server" DataSourceID="SqlDataSource1">
  2.         
  3.         "1pt">
  4.         "5">我是头模板        
  5.         
  6.         
  7.         
  8.         "Repeater.aspx?id=<%# Eval("ID") %>"><%# Eval("ID") %>
  9.         <%# Eval("sname") %>
  10.         <%# Eval("english") %>
  11.         <%# Eval("distrubute")%>
  12.         <%# Eval("finalpoint") %>
  13.         
  14.         
  15.         
  16.         
  17.         "red"><%# Eval("ID") %>
  18.         "red"><%# Eval("sname") %>
  19.         "red"><%# Eval("english") %>
  20.         "red"><%# Eval("distrubute") %>
  21.         "red"><%# Eval("finalpoint") %>        
  22.         
  23.         
  24.         
  25.         "5">"1pt" />
  26.         
  27.         
  28.         
  29.         
  30.         
  31.         "SqlDataSource1" runat="server" 
  32.             ConnectionString="<%$ ConnectionStrings:DbOneConnectionString %>" 
  33.             SelectCommand="SELECT [ID], [sname], [english], [distrubute], [finalpoint], [sbool] FROM [sscore_OLD_local]">
  34.         

 

二、Reapter控件的嵌套和分页

      嵌套的时候,当然只能手动写它的数据源代码,示例如下:

  1.         "Repeater1" runat="server" 
  2.             onitemdatabound="Repeater1_ItemDataBound">
  3.         
  4.         "1pt" width="500">
  5.         "background-color:#ccffcc;">"5">我是头模板        
  6.         
  7.         
  8.         
  9.         "Repeater.aspx?id=<%# Eval("ID") %>"><%# Eval("ID") %>
  10.         <%# Eval("sname") %>
  11.         <%# Eval("english") %>
  12.         <%# Eval("distrubute")%>
  13.         
  14.             "Repeater2" runat="server" datasource='<%# Eval("myrela") %>'>
  15.             
  16.             <%# Eval("[/"ID/"]") %>
  17.             
  18.             
  19.         
  20.         
  21.         
  22.         
  23.         
  24.         "red"><%# Eval("ID") %>
  25.         "red"><%# Eval("sname") %>
  26.         "red"><%# Eval("english") %>
  27.         "red"><%# Eval("distrubute") %>
  28.         
  29.             "Repeater2" runat="server" datasource='<%# Eval("myrela") %>'>
  30.             
  31.             <%# Eval("[/"sname/"]") %>
  32.             
  33.             
  34.                
  35.         
  36.         
  37.         
  38.         "5">"1pt" />
  39.         
  40.         
  41.         
  42.         "5" style="font-size:12pt;color:#0099ff;background-color:#e6feda;">
  43.             共"lblp" runat="server" Text = "Lable">页    
  44.             当前"lblc" runat="server" Text = "Lable">页  
  45.             "hlfir" runat="server" Text="首页"
  46.             "hlp" runat="server" Text="上一页"
  47.             "hln" runat="server" Text="下一页"
  48.             "hlla" runat="server" Text="末页"
  49.         
  50.         
  51.         
  52.         
  53.         

 

请注意在内嵌Reapter控件中的数据绑定方式,和开始略有不同。FooterTemplate模板的两个Lable和四个HyperLink是用来实现分页的,稍后详述。Reapter控件的数据代码绑定方式如下:

  1. protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             //Datalist数据源绑定
  4.             if (!IsPostBack)
  5.             {
  6.                 Repeater1.DataSource = pds();
  7.                 Repeater1.DataBind();
  8.             }
  9.         }
  10.         private PagedDataSource pds()
  11.         {
  12.             string conn = ConfigurationManager.ConnectionStrings["DbOneConnectionString"].ConnectionString;
  13.             //声明查询字符串
  14.             SqlConnection con = new SqlConnection(conn);
  15.             //初始化连接,实际就是打开或建立一个数据库连接,在此连接上可以进行查询
  16.             DataSet ds = new DataSet();
  17.             //创建DataSet,即是数据在内存中以DataTable为类型的缓存
  18.             SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM SSCORE_OLD_local", con);
  19.             //创建查询了
  20.             sda.Fill(ds,"name");
  21.             //将查询到的数据填充到name表中
  22.             SqlDataAdapter sda2 = new SqlDataAdapter("SELECT * FROM SSCORE_OLD", con);
  23.             sda2.Fill(ds, "title");
  24.             ds.Relations.Add("myrela", ds.Tables["name"].Columns["sname"], ds.Tables["title"].Columns["sname"]);
  25.             //为两个表创建关系,将名字相同的ID放一起
  26.             PagedDataSource pds = new PagedDataSource();
  27.             pds.DataSource = ds.Tables["name"].DefaultView;
  28.             pds.AllowPaging = true;
  29.             pds.PageSize = 6;
  30.             pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
  31.             return pds;
  32.         }

 

      注意,其数据绑定只一次,所以使用了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 方法会确定已对其执行的更改的类型(InsertUpdate Delete)。根据更改类型,执行 InsertUpdate Delete 命令模板将已修改的行传播给数据源。当 SqlDataAdapter 填充 DataSet 时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用 FillSchema,让 SqlDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。有关更多信息,请参见向数据集添加现有约束 (ADO.NET)

SqlDataAdapter SqlConnection SqlCommand 一起使用,以便在连接到 SQL Server 数据库时提高性能。

注意:

如果使用 SQL Server 存储过程编辑或删除使用 DataAdapter 的数据,请确保不要在存储过程定义中使用 SET NOCOUNT ON。这将导致返回的受影响行数为零,DataAdapter 将其解释为并发冲突。这种情况下将引发 DBConcurrencyException

SqlDataAdapter 还包括 SelectCommandInsertCommandDeleteCommandUpdateCommand TableMappings 属性,以便于数据的加载和更新。

当创建 SqlDataAdapter 的实例时,读/写属性将被设置为初始值。有关这些值的列表,请参见 SqlDataAdapter 构造函数。

InsertCommandDeleteCommand UpdateCommand 是泛型模板,通过参数机制由来自每个修改行的各个值自动填充。

对于传播给 Update 上的数据源的每一列,应向 InsertCommandUpdateCommand DeleteCommand 添加一个参数。DbParameter 对象的 SourceColumn 属性将被设置为列的名称。此设置指示该参数值并非手动设置,而是获取自当前处理的行中的特定列。

 

     应用两个Lable和四个HyperLink和Reapter控件的ItemDataBound事件来实现分页,代码如下:

  1. protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
  2.         {
  3.             if (e.Item.ItemType == ListItemType.Footer)
  4.             {
  5.                 int count = pds().PageCount;//(Repeater)object).Items.Count;
  6.                 int i = pds().CurrentPageIndex;//
  7.                 Label lblpc = (Label)e.Item.FindControl("lblp");
  8.                 lblpc.Text = count.ToString();
  9.                 Label lblct = (Label)e.Item.FindControl("lblc");
  10.                 lblct.Text = (i + 1).ToString();
  11.                 //首页
  12.                 HyperLink hlfir = (HyperLink)e.Item.FindControl("hlfir");
  13.                 if (i != 0)
  14.                 {
  15.                     hlfir.NavigateUrl = "RepeaterNesting.aspx?page=0";
  16.                 }
  17.                 else
  18.                 {
  19.                     hlfir.Enabled = false;
  20.                 }
  21.                 //上一页
  22.                 HyperLink hlp = (HyperLink)e.Item.FindControl("hlp");
  23.                 if (i > 0)// >= 1
  24.                 {
  25.                     hlp.NavigateUrl = "RepeaterNesting.aspx?page=" + (i - 1).ToString();
  26.                 } 
  27.                 else
  28.                 {
  29.                     hlp.Enabled = false;
  30.                 }
  31.                 //下一页
  32.                 HyperLink hln = (HyperLink)e.Item.FindControl("hln");
  33.                 if (i < count - 1)
  34.                 {
  35.                     hln.NavigateUrl = "RepeaterNesting.aspx?page=" + (i + 1).ToString();
  36.                 }
  37.                 else
  38.                 {
  39.                     hln.Enabled = false;
  40.                 }
  41.                 //末页
  42.                 HyperLink hlla = (HyperLink)e.Item.FindControl("hlla");
  43.                 if(i == count - 1)
  44.                 {
  45.                     hlla.Enabled = false;
  46.                 }
  47.                 else
  48.                 {
  49.                     hlla.NavigateUrl = "RepeaterNesting.aspx?page=" + (count - 1).ToString();
  50.                 }
  51.             }
  52.         }

 

其它的,肯定还有多种分页方式,希望大师或高手能推荐更好的方式分享。

你可能感兴趣的:(AspDotNet,dataset,hyperlink,server,sql,server,asp,insert)