0.调用代码

protected override void Page_Load(object sender, EventArgs e)
{
//给基类服务接口复制,可不付
if (IsPostBack)
{
if (Session["ReportTable3.Dev.Session"] != null)
{
var dt = (System.Data.DataSet)Session["ReportTable3.Dev.Session"];
ASPxGridView1.DataSource = dt;
ASPxGridView1.DataBind();
}
}

//1.这里AfterSelect 是个委托对象,继承多播委托,这里是在注册,最终执行委托的时候会把委托的内容逐一执行一遍,+=也可称为为委托注册方法实例
this.MyPageBar1.AfterSelect += MyPageBar1_AfterSelect;

base.Page_Load(sender, e);
}

//2.委托方法或者成为委托内容 注册的方法并不会马上执行,事件需要触发,可以传递sender对象和事件参数 e

private void MyPageBar1_AfterSelect(object sender, UserControls.SelectEventArgs e)
{

ASPxGridView1.DataSource = e.DataSource;
ASPxGridView1.DataBind();
}

1.先上核心代码 .ascx.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DevExpress.Web;
using DevExpress.XtraPrinting.Native;
using Framework;

namespace HraWeb.UserControls
{
public partial class MyPageBar : System.Web.UI.UserControl
{
public delegate void BegBindDataEventHandler(object sender, SelectEventArgs e);
public event BegBindDataEventHandler AfterSelect;
private Contract.IService.IDaoService _dao;
/// <summary>
/// 通用数据库操作
/// </summary>
public virtual Contract.IService.IDaoService Dao
{
get
{
if (_dao == null)
_dao = (Contract.IService.IDaoService)ctx["DaoService"];
return _dao;
}
}
private Spring.Context.IApplicationContext _ctx;
protected Spring.Context.IApplicationContext ctx
{
get
{
if (_ctx == null)
_ctx = Spring.Context.Support.ContextRegistry.GetContext();
return _ctx;
}
}

private int TotalBlock
{
get { return (PageCount - 1)/unitQ + 1; }
}

public object DataSource
{
get;
set;
}

private int _pageCount;

private int PageCount
{
get
{
_pageCount = (TotalCount - 1)/PageSize + 1;
return _pageCount;
}
set { _pageCount = value; }
}

public int TotalCount { get; set; }

private int PageIndex { get; set; }
public int PageSize { get; set; }

public ASPxGridView ViewSource { get; set; }

public void GridDataBind()
{
if (SearchInfo != null)
{
Session["SearchInfo"] = SearchInfo;
}
if (TotalCount != 0)
{
Session["TotalCount"] = TotalCount;
TotalCount = (int) Session["TotalCount"];

Session["PageCount"] = PageCount;

Session["TotalBlock"] = TotalBlock;
}
int currentBlock = 0;
if (Session["CurrentBlock"] != null)
{
currentBlock = (int) Session["CurrentBlock"];
}
else
{
currentBlock = this.CurrentBlock;
}
LoadBlock(currentBlock);
if (Session["CurrNum"] != null)
{
((LinkButton)Session["CurrNum"]).Enabled = false;
}
if (Session["SearchInfo"] != null)
{
SearchInfo = (QueryInfo)Session["SearchInfo"];
SearchInfo.PageSize = PageSize;
SearchInfo.StartRecord = (PageIndex - 1) * PageSize;
SearchInfo.TotalCount = 1;
}

if (Session["ViewSource"] == null)
{
Session["ViewSource"] = ViewSource;
}
else
{
ViewSource = (ASPxGridView)Session["ViewSource"];
}
DataTable dt = Dao.ExcuteDataSet(SearchInfo).Tables[0];

var onAfterSelect = this.AfterSelect;
onAfterSelect?.Invoke(this, new SelectEventArgs(dt));

}

public QueryInfo SearchInfo { get; set; }

protected void Page_Load(object sender, EventArgs e)
{
CurrentBlock = 1;
PageIndex = PageIndex == 0 ? 1 : PageIndex;
PageSize = PageSize == 0 ? 6 : PageSize;
Controls.Add("1", LinkButton1);
Controls.Add("2", LinkButton2);
Controls.Add("3", LinkButton3);
Controls.Add("4", LinkButton4);
Controls.Add("5", LinkButton5);
Controls.Add("6", LinkButton6);
}

public void Btn_Change(object sender)
{
for (int i = 0; i < Controls.Count; i++)
{
Controls[(i + 1).ToString()].Enabled = true;
}
LinkButton btn = (sender as LinkButton);
if (btn != null)
{
btn.Enabled = false;
PageIndex = int.Parse(btn.Text);
CurrNum = btn.Text;
Session["CurrNum"] = btn;
GridDataBind();

}
}

/// <summary>
/// 1
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButton1_Click(object sender, EventArgs e)
{
Btn_Change(sender);
}
/// <summary>
/// 2
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButton2_Click(object sender, EventArgs e)
{
Btn_Change(sender);

}
/// <summary>
/// 3
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButton3_Click(object sender, EventArgs e)
{
Btn_Change(sender);
}

/// <summary>
/// 4
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

protected void LinkButton4_Click(object sender, EventArgs e)
{
Btn_Change(sender);
}
/// <summary>
/// 5
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButton5_Click(object sender, EventArgs e)
{
Btn_Change(sender);
}
/// <summary>
/// 6
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkButton6_Click(object sender, EventArgs e)
{
Btn_Change(sender);
}

public int CurrentBlock { get; set; }
private string CurrNum;
private void LoadBlock(int CurrentBlock)
{

for (int i = 0; i < Controls.Count; i++)
{
Controls[(i + 1).ToString()].Enabled = true;
Controls[(i + 1).ToString()].Visible = false;
}
int start = (CurrentBlock - 1) * unitQ + 1;
int end = 0;
for (int i = 0; i < unitQ; i++)
{
end = start + i;
int pages;
if (Session["PageCount"] != null)
{
pages = (int) Session["PageCount"];
}
else
{
pages = PageCount;
}
if (end <= pages)
{
Controls[(i + 1).ToString()].Text = end.ToString();
Controls[(i + 1).ToString()].Visible = true;
}

}
}

protected void ImageButtonPre_Click(object sender, ImageClickEventArgs e)
{

int currentBlock = 0;
if (Session["CurrentBlock"] != null)
{
currentBlock = (int)Session["CurrentBlock"];
}
else
{
currentBlock = CurrentBlock;
}

if (currentBlock >1)
{
currentBlock--;
Session["CurrentBlock"] = currentBlock;
}

if (currentBlock <1)
{
return;
}
GridDataBind();

}

public int unitQ = 5;

public Dictionary<string, LinkButton> Controls = new Dictionary<string, LinkButton>();
protected void ImageButtonNext_Click(object sender, ImageClickEventArgs e)
{

int totalBlock = (int)Session["TotalBlock"];
int currentBlock = 0;
if (Session["CurrentBlock"] != null)
{
currentBlock = (int)Session["CurrentBlock"];
}
else
{
currentBlock = CurrentBlock;
}

if (currentBlock < totalBlock)
{
currentBlock++;
Session["CurrentBlock"] = currentBlock;
}

if (currentBlock > totalBlock)
{
return;
}
GridDataBind();

}
}
public class SelectEventArgs : EventArgs
{
private DataTable _dataSource = null;
public DataTable DataSource
{
get { return _dataSource; }
}

public SelectEventArgs(DataTable data)
{
_dataSource = data;
}
}

}

2.再上前台代码,没什么东西看看而已

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyPageBar.ascx.cs" Inherits="HraWeb.UserControls.MyPageBar" %>

<asp:ImageButton ID="ImageButtonPre" runat="server" Height="20px" ImageUrl="~/images/previous.png" Width="20px" OnClick="ImageButtonPre_Click" />
<asp:LinkButton ID="LinkButton1" Text="1" runat="server" OnClick="LinkButton1_Click">1</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" Text="2" runat="server" OnClick="LinkButton2_Click">2</asp:LinkButton>
<asp:LinkButton ID="LinkButton3" Text="3" runat="server" OnClick="LinkButton3_Click">3</asp:LinkButton>
<asp:LinkButton ID="LinkButton4" Text="4" runat="server" OnClick="LinkButton4_Click">4</asp:LinkButton>
<asp:LinkButton ID="LinkButton5" Text="5" runat="server" OnClick="LinkButton5_Click">5</asp:LinkButton>
<asp:LinkButton ID="LinkButton6" Text="6" runat="server" OnClick="LinkButton6_Click">6</asp:LinkButton>
<asp:ImageButton ID="ImageButtonNext" runat="server" ImageUrl="~/images/next.png" Height="20px" Width="20px" OnClick="ImageButtonNext_Click" ViewStateMode="Enabled" />

3.设计器代码(自动生成可以不用管)

//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------

namespace HraWeb.UserControls {

public partial class MyPageBar {

/// <summary>
/// ImageButtonPre 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.ImageButton ImageButtonPre;

/// <summary>
/// LinkButton1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.LinkButton LinkButton1;

/// <summary>
/// LinkButton2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.LinkButton LinkButton2;

/// <summary>
/// LinkButton3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.LinkButton LinkButton3;

/// <summary>
/// LinkButton4 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.LinkButton LinkButton4;

/// <summary>
/// LinkButton5 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.LinkButton LinkButton5;

/// <summary>
/// LinkButton6 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.LinkButton LinkButton6;

/// <summary>
/// ImageButtonNext 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.ImageButton ImageButtonNext;
}
}

asp.net web 自定义控件的更多相关文章

  1. 关于asp.net web form 和 asp.net mvc 的区别

    asp.net web forms 有什么缺陷? 1.视图状态臃肿:服务器和客户端传输过程中包含了大量的试图状态——在现在的web程序中甚至多达几百kb,而且每次往返都会请求,导致服务器请求带宽增加, ...

  2. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  3. ASP.NET Web API Model-ActionBinding

    ASP.NET Web API Model-ActionBinding 前言 前面的几个篇幅把Model部分的知识点划分成一个个的模块来讲解,而在控制器执行过程中分为好多个过程,对于控制器执行过程(一 ...

  4. ASP.NET Web API Model-ParameterBinding

    ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被 ...

  5. ASP.NET Web API Model-ModelBinder

    ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...

  6. ASP.NET Web API Model-ValueProvider

    ASP.NET Web API Model-ValueProvider 前言 前面一篇讲解了Model元数据,Model元数据是在Model绑定中很重要的一部分,只是Model绑定中涉及的知识点比较多 ...

  7. ASP.NET Web API Model-ModelMetadata

    ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...

  8. ASP.NET Web API 过滤器创建、执行过程(二)

    ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器 ...

  9. ASP.NET Web API 过滤器创建、执行过程(一)

    ASP.NET Web API 过滤器创建.执行过程(一) 前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就 ...

随机推荐

  1. LeetCode Complex Number Multiplication

    原题链接在这里:https://leetcode.com/problems/complex-number-multiplication/description/ 题目: Given two strin ...

  2. Spring IOC容器的初始化—(一)Resource定位

    前言 上一篇博文“ Spring IOC是怎样启动的 ”中提到了refresh()方法,这个就是容器初始化的入口.容器初始化共有三个阶段: 第一阶段:Resource定位 第二阶段:BeanDefin ...

  3. Django工程目录结构优化

    1.我看到这篇文章,写的不错,在此复制了一份,防止以后找不到! 感谢作者的翻译--->原文的链接:http://www.loonapp.com/blog/11/ 如果原文存在,请打开原文件阅读 ...

  4. 洛谷 1514 (NOIp2010) 引水入城

    题目:https://www.luogu.org/problemnew/show/P1514 如果有解,一个第一行的格子能覆盖第n行的一定是一个连续的区间. 因为如果不连续,则有围住了一些第n行的格子 ...

  5. 加载rocksdb实例报错:java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\librocksdbjni3696928169151614297.dll

    项目的缓存中用到了rocksdb,实例化时报错了: Related cause: org.springframework.beans.factory.BeanCreationException: Er ...

  6. 2、Flume1.7.0入门:安装、部署、及flume的案例

    一.什么是Flume? flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用. flume的特点: flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的 ...

  7. Train-Alypay-Cloud:蚂蚁金融云知识点

    ylbtech-Train-Alypay-Cloud:蚂蚁金融云知识点 1.返回顶部 1. 1.数据库与缓存结合使用https://www.cloud.alipay.com/docs/2/47337 ...

  8. Kata 架构

    原文:https://github.com/kata-containers/documentation/blob/master/architecture.md (欢迎纠错) Kata-runtime ...

  9. Linux - 目录结构及文件操作

    根目录 “/”:Linux 系统中最高层的目录 这个就是根目录 用 / 表示根目录 bin 目录:存放可执行文件 bin 目录下的文件都是平常使用的命令 在 Linux 系统中,一切都是文件 sbin ...

  10. CVE-2017-11882复现配合koadic

    项目地址:https://github.com/iBearcat/CVE-2017-11882 首先开启koadic,然后配置一下 复制这句代码 mshta http://192.168.220.13 ...