JCCRepeaterBeta1.0 源码

asp.net c#自定义控件之万能Repeater源码 自定义控件之万能Repeater源码 为什么要用Repeater,因为Repeater的性能最好,扩展性最强。 为什么现在用Repeater的人越来越少,因为其可操作性相对较差。 那么,如果我只需拖动一个Repeater 然后给他一个数据源 就可以完成列表,分页,全选,批量删除,排序等功能。那么你还会说Repeater的可操作性差吗? 立即下载

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

 

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

 

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

 

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>

 

最简单repeater嵌套方法带源码适合初学。 适合初学的时候 可以用在很多方面 的repeater 嵌套调用。有兴趣的可以看看 立即下载

相关推荐

Repeater控件无限级显示菜单

本资料是利用VS2010 开发,SQL2005以上版本,Repeater控件无限级显示菜单信息,能增、删、改、查

原码补码反码

机器数: 一个数在计算机中的表现形式叫做机器数,这个数有正负之分,在计算机中用一个数的最高位(符号位)用来表示它的正负,其中0表示正数,1表示负数。 例如正数7,在计算机中用一个8位的二进制数来表示,是00000111,而负数-7,则用10000111表示,这里的00000111和10000111是机器数。 原码: 用第一位表示符号,其余位表示具体值。因为第一位是符号位,所以8位二进制数的取值范围就是:[11111111, 01111111] 即[-127 , 127] 反...

在天一方,在水一角 833

JSPCN中文网新闻发布系统 v1.0 原码

CN新闻发布系统 JSPCN中文网新闻发布系统 v1.0 原码

计算机中的原码/反码/补码

为什么要学习原码、反码、补码呢?先来认识下计算机中的原码、反码以及补码。 原码 就是二进制定点表示法,即最高位为符号位,“0“表示正,“1“表示负,其余位表示数值的大小。 通过一个字节,也就是8个二进制位来表示7和-7: 7: 00000111(符号位0表示正数) -7:10000111(符号位1表示负数) 反码 正数反码与其原码相同,负数对其原码逐位取反,但符号位除外; 7的反码: 000001...

刘小毅的博客 874

自定义控件之万能Repeater源码

为什么要用Repeater,因为Repeater的性能最好,扩展性最强。为什么现在用Repeater的人越来越少,因为其可操作性相对较差。Repeater 完成列表,分页,全选,批量删除,排序等功能。

别再只抄代码了!深入理解MQ2传感器数据手册,搞定ppm换算公式

本文深入解析MQ2烟雾传感器的工作原理与ppm换算公式,从数据手册解读到数学建模,提供详细的校准与优化方法。通过实际案例和代码示例,帮助开发者准确测量气体浓度,解决常见问题,提升传感器应用的可靠性。

weixin_42713608的博客 504

Java基本数据类型数据溢出底层原理:原码、反码、补码

计算器底层使用二机制 补码 进行运算 正数的原码 = 反码= 补码 负数的反码是原码 第一符号位数 不变 其他位数取反 负数的补码是负数的反码+1 一个字节占8位,不足补0,其中第一位表示正负符号,0表示正数,1表示负数 例如 int类型占4个字节,所以有48位二进制, 8是 1000,不足48位补0, 原码为 00000000 00000000 00000000 00001000 是正数 补码=原码 =反码 -8是 原码10000000 00000000 00000000 00001000 是负

Xs943的博客 1406

华科软院研究生第一学期的事项(奖学金、学业、考试等)

奖助 研究生补助 每月500,全年共6000元 每个月月底学院会打到银行卡里 碰上开学、过年会延后发放 17年10月底发了9、10两个月的钱 18年3月底发了2、3月的钱 学业奖学金 17届全日制每人都有 按照考研最后综合成绩排名 前16 10000 前80 8000 其他 4000 大概11月底发 注意:第一年如果有挂科的话,第二年就不能参加学业奖学金评...

sjdeak的博客 3706

补码原码反码溢出问题

数据的机器层次表示 文章目录数据的机器层次表示2.1 补码+原码+反码1. 原码表示法2. 补码表示法3. 反码表示法4. 三种表示法比较2.2 原码补码加减法运算1. 补码加法2. 补码减法3. 符号扩展2.3 溢出判断1. 采用一个符号位2. 采用进位位3. 采用变形补码(双符号位) 2.1 补码+原码+反码 1. 原码表示法 符号位单拎出来,正数为0,负数为1。 假设机器字长5位: 1)整数: +1101,[x]原[x]_原[x]原​=0,1101 -1101,[x]原[x]_原[x]原​=1,11

capslock813的博客 5722

冲压机器人系列编程:ABB IRB 6700_(6).RAPID编程语言入门

主菜单:包含文件、编辑、视图、工具等常用操作。项目浏览器:显示当前项目的文件结构,包括机器人模型、程序模块等。图形界面:用于创建和编辑机器人的虚拟环境。RAPID代码编辑器:用于编写和编辑RAPID代码。仿真控制面板:用于控制仿真过程,包括启动、暂停、停止等。变量是存储数据的容器,可以通过变量名访问和修改其存储的数据。变量定义时需要指定其类型和名称。% 定义一个整数变量并赋初值% 定义一个实数变量,未赋初值函数定义时需要指定其返回类型和参数。num result;子程序类似于函数,但不返回值。

zhubeibei168的博客 1378

UNet改进(24):注意力机制-从基础原理到高级融合策略

本文系统探讨了如何通过引入各类注意力机制增强UNet在医学图像分割中的性能。文章分为基础篇、进阶篇和高级篇三个层级:基础篇介绍了时序注意力、可变形注意力、分层注意力等8种基础机制;进阶篇提出了5种混合注意力设计;高级篇则探讨了全局+局部+多尺度等复杂组合机制。实验表明,这些注意力模块在心脏MRI、肺部感染等任务中能提升2-15%的分割精度。文章还提供了硬件适配建议和完整实现代码,为研究者提供了全面的技术参考。未来方向包括NAS优化、量子注意力等前沿探索,为UNet在医疗影像等领域的应用革新提供了理论指导。

2501_91516851的博客 765

Java 各币值找零(源码)

package 第二次作业; public class 第一题第一问 {                                 //class类名   public static void main(String[] args) {        //相当于主函数    String 应收金额 =  javax.swing.JOptionPane.showInputDialog

唐文宁的博客 3543

PostgreSQL 核心原理:大字段(大对象)是如何被压缩和存储的(TOAST存储机制)

PostgreSQL通过TOAST机制高效处理大字段存储问题,解决单行超过8KB页大小限制的挑战。TOAST采用透明分片、按需加载和自动压缩策略,支持TEXT、JSONB等变长类型,无需用户干预。其核心包括四种存储策略(plain/external/main/extended),自动将大字段分片存入专用TOAST表,主表仅保留指针。读取时按需解压拼接,支持部分加载优化。TOAST表结构包含chunk_id、序列号和分片数据,配合内置PGLZ压缩算法,平衡存储效率与访问性能。该机制使PostgreSQL能稳定

数据知道的博客 2627

零代码爬取全国高校信息(火车采集器)

我们以阳光高考网为例,用火车爬取器零代码爬取全国高校的部分信息 链接:https://pan.baidu.com/s/10aw0_yi4DVJdtpAPtCivtA 密码:tnwx 进入阳光高考网的院校库,随便点进去一个学校,看他的url,比如第一个北大(https://gaokao.chsi.com.cn/sch/schoolInfoMain--schId-1.dhtml),第二个人大(h...

欧阳罢笔的博客 2583

不加行也能填满:用 ABAP BDC 驯服 Table Control 滚动录制缺陷,批量维护供应商银行账户

摘要 本文探讨了在SAP ECC/S4HANA系统中处理供应商主数据时,Table Control控件带来的批量导入挑战。文章指出,银行账户维护界面中Table Control的滚动动作难以被录制工具捕捉,导致批量导入数据时仅能填充前5行。解决方案是通过BDC_OKCODE显式触发翻页(如=P+),并配合行号拼接(如(01)~(05))将数据写入不可见行。文中提供了完整的ABAP程序示例,展示了如何读取外部文件、动态生成BDCDATA、处理表格翻页逻辑,最终通过CALL TRANSACTION执行XK01事

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

YOLOv8独家原创改进:原创自研 | 创新自研CPMS注意力,多尺度通道注意力具+多尺度深度可分离卷积空间注意力,全面升级CBAM

自研CPMS,多尺度通道注意力具+多尺度深度可分离卷积空间注意力,全面升级CBAM

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 3798

计算机 原码 反码 补码

由于基础知识不牢进行补脑 以下举例无特殊说明,都是以8位为例。 符号位 符号位定义:在内存或寄存器中最高位定义为符号位,1表示负数、0表示正数。 举例:在byte中一共有8个位。 0000 0001 表示的是正数,最高位为 0 即是正数 1000 0001 表示的是负数,最高位为 1 即是负数 原码 原码定义: 0000 0001 表示+1的原码1000 0001 表示-1的原码 反码 反码的定义:正数的反码是其本身。负数的反码,除符号位外取反。 举例: [+1]...

qiuxue110的专栏 2007

3、无限维系统理论中的算子与半群:概念、定理及应用

本博文深入探讨了无限维系统理论中的两个核心概念:里茨谱算子与卢默-菲利普斯定理。文章首先介绍了里茨基的定义与性质,分析了谱、预解集及特征值在无限维系统中的特性,并详细阐述了里茨谱算子的条件及其生成C0-半群的能力,结合阻尼欧拉-伯努利梁模型展示了其应用。随后,文章介绍了卢默-菲利普斯定理及其推论,通过多个偏微分方程实例(如一阶方程、柔性梁、波动方程和扩散问题)说明如何利用该定理判断算子是否生成压缩半群。此外,还强调了状态空间选择和边界条件对系统适定性的重要影响,并总结了相关问题的解决步骤与方法。

flink9streamer的博客 148

原码, 反码, 补码 详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! &nbsp; 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式,&nbs...

maijia0754的博客 899

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

零的原码反码和补码

+0 -0 原码:00000000 100000000 反码:00000000 111111111 补码:00000000 000000000

张疯子 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基础回顾-1 原码、反码和补码

基本概念:在计算机中,最小单元是 bit,二进制位。8个bit组成了1个byte ,一字节。存储器的最小单元是1个字节,即 当某个数据,转化为二进制数据时,当长度小于8位,计算器分配的仍旧是1字节的存储空间。 计算数 一个数在机器中的二进制表示形式,即为机器数。机器数最高位为符号位,正数为0,负数为1。 比如十进制数5,在存储器中用一个单元存储时,为 0000 0101,如果是-5,则为 1000...

weixin_34250709的博客 6696

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: JCCRepeaterBeta1.0说明--Repeater的加强控件
下一篇: petshop3.0-jcc学习笔记(一)系统架构
JavaDianNet
博客等级 码龄21年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值