现在的位置: 首页 > 综合 > 正文

JCCRepeaterBeta1.0 源码

2013年10月11日 ⁄ 综合 ⁄ 共 8929字 ⁄ 字号 评论关闭

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

 

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

 

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>

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=707287

 

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  onkeyup='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 ;
  }
 }
}

抱歉!评论已关闭.