JCCRepeaterBeta1.0 源码

/********控件源码****/

 

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace UserControlTest.Controls
{
 public enum NavPosition{NavTop , NavBottom , NavBoth}
 public enum NavAlignment{NavLeft , NavRight}

 /// <summary>
 /// JCCRepeaterBeta 的摘要说明。
 /// </summary>
 [DefaultProperty("Text"),
  ToolboxData("<{0}:JCCRepeaterBeta runat=server></{0}:JCCRepeaterBeta>")]
 public class JCCRepeaterBeta  :Repeater
         {
  string clientScript = @"<script language='javascript'>
 function pageTextBox_Onclick(sender)
 {
  //var x = this.document.getElementById('textfield').value ;
  var x = sender.value ;
  //验证是否为空
  
  if(x.replace(/(^/s*)|(/s*$)/g, '')=='')
  {
   alert('请数入跳转的页数') ;
   sender.value = '' ;
   return ;
  }
  
  //验证是否为正整数
  if(/^[1-9]*[1-9][0-9]*$/.test(x)){
   document.location = '?page=' + x ;
  }
  else
  {
   alert('页数只能为正整数') ;
   sender.value = '' ;
   return false ;
  }
 }
</script>" ;
  private string html10 = "<table width=/"100%/" border=/"0/">" ;
  private string html11 = "<tr><td>" ;
  private string html2 = "</td></tr>" ;

  private string html31 = "<tr><td align=/"{0}/" >" ;
  private string html32 = "<table ><tr>" ;
  private string html33 = "<td><a href=?page=1>首页</a></td>" ;
  private string html34 = "<td><a href=?page={0}>上页</a></td>" ;
  private string html35 = "<td><a href=?page={0}>{1}</a>   " ;
  private string html36 = "<td><a href=?page={0}>下页</a></td>" ;
  private string html37 = "<td><a href=?page={0}>末页</td>" ;
  private string html372 = "<td><input type=/"text/" name=/"textfield/" size=1  οnkeyup='if(event.keyCode==13) pageTextBox_Onclick(this) ;'></td>" ;
  
  private string html38 = "</tr></table>" ;
  private string html39 = "</td></tr>" ;
  private string html4 = "</table>" ;
 

  //公开属性
  private string sql ;//查询的SQL语句
  private string orderFld ;//排序字段
  private int recordCountPerPage ;//每页的记录数目

  private int barCount = 5 ;//显示页数的个数
  private int barIndex = 3;//显示在第几个
  private NavPosition navPos = NavPosition.NavBoth;
  private NavAlignment navAlign =  NavAlignment.NavRight;

  //私有属性
  private int currentPage  ;//当前页
  private int lastPage ;
  

 

 


  public string SQL
  {
   get { return sql; }
   set { sql = value; }
  }

  public string OrderFld
  {
   get { return orderFld; }
   set { orderFld = value; }
  }

  public int RecordCountPerPage
  {
   get { return recordCountPerPage; }
   set { recordCountPerPage = value; }
  }

  private int CurrentPage
  {
   get { return currentPage; }
   set
   {
    int totalPages = 10 ;
    if(currentPage<1)
     currentPage = 1 ;
    if(currentPage>totalPages)
     currentPage = totalPages ;
    currentPage = value;
    this.OnDataBinding(null);
   }
  }

  private int LastPage
  {
   get { return lastPage; }
   set { lastPage = value; }
  }

  public int BarCount
  {
   get { return barCount; }
   set { barCount = value; }
  }

  public int BarIndex
  {
   get { return barIndex; }
   set { barIndex = value; }
  }

  public NavPosition NavPos
  {
   get { return navPos; }
   set { navPos = value; }
  }

  public NavAlignment NavAlign
  {
   get { return navAlign; }
   set { navAlign = value; }
  }


  /// <summary>
  /// 将此控件呈现给指定的输出参数。
  /// </summary>
  /// <param name="output"> 要写出到的 HTML 编写器 </param>
  protected override void Render(HtmlTextWriter output)
  {
   output.Write(clientScript);
   output.Write(html10);
   if(this.NavPos != NavPosition.NavBottom)
   {
    printNav(output) ;
   }
   output.Write(html11);
   base.Render(output);
   //if(this.NavAlign == NavAlignment.NavRight)
   //output.Write(string.Format(html2 , "right"));
   //else
   //output.Write(string.Format(html2 , "right"));
   output.Write(html2);

   if(this.NavPos != NavPosition.NavTop)
   {
    printNav(output) ;
   }
   output.Write(html4);

   //output.Write(this.SQL + this.RecordCountPerPage + this.OrderFld);
   //output.Write(((DataView)this.DataSource).Count);
  }

  private void printNav(HtmlTextWriter output)
  {
   if(this.NavAlign == NavAlignment.NavRight)
    output.Write(string.Format(html31 , "right"));
   else
    output.Write(string.Format(html31 , "left"));

   output.Write(html32);

   if(this.CurrentPage!=1)
   {
    output.Write(html33);
    output.Write(string.Format(html34,this.CurrentPage-1));
   }

   int pageBegin , pageEnd ;
   setBeginAndEnd(this.LastPage , this.CurrentPage ,BarCount,this.BarIndex,out pageBegin ,out pageEnd) ;
   for(int i = pageBegin ;i<=pageEnd ;i++)
   {
    output.Write(string.Format(html35,i,i));
   }
   
   if(this.CurrentPage!=this.LastPage)
   {
    output.Write(string.Format(html36,this.CurrentPage+1));
    output.Write(string.Format(html37 , LastPage));
   }
   output.Write(html372);
   output.Write(html38);   
   output.Write(html39);   

  }

  protected override void OnDataBinding(EventArgs e)
  {
   
   string strConn = "server=clx ;database=dbpstest;uid=sa;pwd='';" ;
   SqlConnection conn = new SqlConnection(strConn);
   conn.Open();

   SqlCommand cmd = new SqlCommand("select count(*) from (" + this.SQL + ") as x" ,conn);
   SqlDataReader sdr = cmd.ExecuteReader() ;
   sdr.Read() ;
   this.LastPage =( Int32.Parse(sdr[0].ToString())-1)/this.RecordCountPerPage + 1 ;
   sdr.Close();
   
   //SqlCommand cmd = new SqlCommand(this.SQL , conn);
   //string sqlExec = "select * from " + ;
   int begin = (this.currentPage-1) * this.RecordCountPerPage + 1 ;
   int end = this.currentPage * this.RecordCountPerPage  ;
   string sqlExec = @"select  *
        from
        (
         select top " + (end-begin+1) + @" * from
         (
          select top " + end + @" *
          from
          (
           select * from stu
          ) as alias1
          order by " + this.OrderFld +  @" asc
         ) as alias2
         order by " + this.OrderFld +  @" desc
        ) as   alias3
        order by " + this.OrderFld ;
   SqlDataAdapter sda = new SqlDataAdapter(sqlExec , conn);
   DataSet ds = new DataSet();
   sda.Fill( ds ) ;
   this.DataSource = ds.Tables[0].DefaultView ;
   base.OnDataBinding (e);//这一句必须放在此方法的最后一句
  }

  protected override void OnLoad(EventArgs e)
  {
   base.OnLoad (e);
   string str = Context.Request["page"] ;
   int x = 1 ;
   if(str!=null)
    x = Int32.Parse(str) ;

   this.CurrentPage = x ;

   
  }

  private void setBeginAndEnd(int total , int current , int count  , int index, out int begin , out int end)
  {


   begin = current -(index-1) ;
   if(begin<1)
    begin = 1 ;
   end = begin + count - 1 ;
   if(end>total)
    end = total ;
  }
 }
}

 

/******数据库脚本测试代码****/

 

create database dbpstest
go
use dbpstest
go

create table stu
(
 stucode varchar(20) primary key ,
 stuname varchar(20) ,
 stuage int
)
go

insert into stu values('stu001','zs',20)
insert into stu values('stu002','ls',21)
insert into stu values('stu003','ww',22)
insert into stu values('stu004','aa',23)
insert into stu values('stu005','bb',24)
insert into stu values('stu006','cc',25)
insert into stu values('stu007','dd',26)

insert into stu values('stu008','ee',27)
insert into stu values('stu009','ff',28)
insert into stu values('stu010','gg',29)
insert into stu values('stu011','hh',80)
insert into stu values('stu012','ii',79)
insert into stu values('stu013','jj',78)
insert into stu values('stu014','kk',77)
insert into stu values('stu015','LL',76)
insert into stu values('stu016','mm',75)
insert into stu values('stu017','nn',74)

 

 

--select * from stu

go

create table stu2
(
 stucode varchar(20) primary key ,
 stuname varchar(20) ,
 stuage int
)
go

insert into stu2 values('stu2001','zs',20)
insert into stu2 values('stu2002','ls',21)
insert into stu2 values('stu2003','ww',22)
insert into stu2 values('stu2004','aa',23)
insert into stu2 values('stu2005','bb',24)
insert into stu2 values('stu2006','cc',25)
insert into stu2 values('stu2007','dd',26)

insert into stu2 values('stu2008','ee',27)
insert into stu2 values('stu2009','ff',28)
insert into stu2 values('stu2010','gg',29)
insert into stu2 values('stu2011','hh',80)
insert into stu2 values('stu2012','ii',79)
insert into stu2 values('stu2013','jj',78)
insert into stu2 values('stu0214','kk',77)
insert into stu2 values('stu2015','LL',76)
insert into stu2 values('stu2016','mm',75)
insert into stu2 values('stu2017','nn',74)

/*
select *
from
(
 select top 4 * from
 (
  select top 6 *
  from
  (
   select * from stu
  ) as alias1
  order by stucode asc
 ) as alias2
 order by stucode desc
) as stu
order by stucode
*/

 

 

/********使用此控件的测试窗体代码*****/

<%@ Register TagPrefix="mycontrol" Namespace="UserControlTest.Controls" Assembly="UserControlTest" %>
<%@ Page language="c#" Codebehind="JCCRepeaterBetaTest.aspx.cs" AutoEventWireup="false" Inherits="UserControlTest.JCCRepeaterBetaTest" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>JCCRepeaterBetaTest</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" Content="C#">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
 </HEAD>
 <body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
   <FONT face="宋体"></FONT>
   <br>
   <br>
   <mycontrol:JCCRepeaterBeta id="mr1" runat="server" RecordCountPerPage="2" OrderFld="stuage" SQL="select * from stu2"
    BarIndex="2" NavPos="NavBoth" BarCount="5" NavAlign="NavLeft">
    <ItemTemplate>
     <tr>
      <td><%# DataBinder.Eval(Container.DataItem ,"stucode") %></td>
      <td><%# DataBinder.Eval(Container.DataItem ,"stuname") %></td>
      <td><%# DataBinder.Eval(Container.DataItem ,"stuage") %></td>
     </tr>
    </ItemTemplate>
    <FooterTemplate>
     </table>
    
</FooterTemplate>
    <HeaderTemplate>
     <table border="1">
      <td>code</td>
      <td>name</td>
      <td>age</td>
    </HeaderTemplate>
   </mycontrol:JCCRepeaterBeta>
  </form>
 </body>
</HTML>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值