JCCRepeaterBeta1.0 源碼

 /********控件源碼****/

 

/******數據庫腳本測試代碼****/

 

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  ο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 ;
  }
 }
}

發佈了10 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章