欢迎光临
我们一直在努力

一个分页跟动态创建列的控件-.NET教程,组件控件开发

建站超值云服务器,限时71元/月

using system;

using system.web;

using system.io;

using system.drawing;

using system.data;

using system.data.sqlclient;

using system.web.ui;

using system.web.ui.htmlcontrols;

using system.web.ui.webcontrols;

using system.componentmodel;

namespace yeno

{

/// <summary>

/// coolpager 的摘要说明。

/// </summary>

#region 构造枚举类型

public enum sorttype

{

asc=0,desc=1

};

public enum iscount

{

noreturnrecordcount=0,returnrecordcount

};

public enum manageswitch

{

on=0,off

};

#endregion

[defaultproperty(""),

toolboxdata("<{0}:einews runat=server></{0}:einews>")]

public class einews : system.web.ui.webcontrols.webcontrol,inamingcontainer

{

protected int recordcount=0;

protected control _controltopaginate;

protected pageddatasource _datasource;

protected repeater _rp=new repeater();

protected string _connectionstring="",_tablename="";

#region 属性

[bindable(true),

category("控件专有属性"),

description("数据源连接字符串"),

defaultvalue("")]

public string connectionstring

{

get

{

return _connectionstring;

}

set

{

_connectionstring=value;

}

}

//表名

[category("控件专有属性"),description("查询表名"),defaultvalue("")]

public string tablename

{

get

{

return _tablename;

}

set

{

_tablename=value;

}

}

//排序字段名

[category("控件专有属性"),description("排序字段"),defaultvalue("")]

public string fieldname

{

get

{

object obj=viewstate["fieldname"];

return (obj==null)?string.empty:obj.tostring();

}

set

{

viewstate["fieldname"]=value;

}

}

//每页显示记录数

[category("控件专有属性"),description("每页记录数"),defaultvalue("")]

public int pagesize

{

get

{

object obj=viewstate["pagesize"];

return (obj==null)?15:convert.toint32(obj);

}

set

{

viewstate["pagesize"]=value;

}

}

//页码

[category("控件专有属性"),description("当前页码"),defaultvalue(""),browsable(false)]

public int pageindex

{

get

{

object obj=viewstate["pageindex"];

return (obj==null)?1:convert.toint32(obj);

}

set

{

viewstate["pageindex"]=value;

}

}

//是否返回记录总数

[category("控件专有属性"),description("是否返回记录总数"),defaultvalue(""),browsable(false)]

public iscount iscount

{

get

{

return iscount.returnrecordcount;

}

}

//排序类型

[category("控件专有属性"),description("排序类型"),defaultvalue("")]

public sorttype sorttype

{

get

{

object obj=viewstate["sorttype"];

return (obj==null)?sorttype.asc:(sorttype)obj;

}

set

{

viewstate["sorttype"]=value;

}

}

[category("控件专有属性"),description("显示导航数字数"),defaultvalue("")]

public int showpagenumber

{

get

{

object obj=viewstate["showpagenumber"];

return (obj==null)?10:convert.toint32(obj);

}

set

{

viewstate["showpagenumber"]=value;

}

}

[category("控件专有属性"),description("开始页"),defaultvalue(""),browsable(false)]

public int pagestart

{

get

{

object obj=viewstate["pagestart"];

return (obj==null)?1:convert.toint32(obj);

}

set

{

viewstate["pagestart"]=value;

}

}

[category("控件专有属性"),description("总页数,自动生成"),defaultvalue(""),browsable(false)]

public int pagecount

{

get

{

object obj=viewstate["pagecount"];

return (obj==null)?1:convert.toint32(obj);

}

set

{

viewstate["pagecount"]=value;

}

}

[category("控件专有属性"),description("类型"),defaultvalue("")]

public string newstype

{

set

{

viewstate["newstype"]=value;

}

get

{

object obj=viewstate["newstype"];

return (obj==null)?string.empty:obj.tostring();

}

}

[category("控件专有属性"),description("表格css"),defaultvalue("")]

public string tablecss

{

set

{

viewstate["tablecss"]=value;

}

get

{

object obj=viewstate["tablecss"];

return (obj==null)?string.empty:obj.tostring();

}

}

[category("控件专有属性"),description("alternatecss"),defaultvalue("")]

public string alternatecss

{

set

{

viewstate["alternatecss"]=value;

}

get

{

object obj=viewstate["alternatecss"];

return (obj==null)?string.empty:obj.tostring();

}

}

[category("控件专有属性"),description("itemcss"),defaultvalue("")]

public string itemcss

{

set

{

viewstate["itemcss"]=value;

}

get

{

object obj=viewstate["itemcss"];

return (obj==null)?string.empty:obj.tostring();

}

}

[category("控件专有属性"),description("buttoncss"),defaultvalue("")]

public string buttoncss

{

set

{

viewstate["buttoncss"]=value;

}

get

{

object obj=viewstate["buttoncss"];

return (obj==null)?string.empty:obj.tostring();

}

}

[category("控件专有属性"),description("textboxcss"),defaultvalue("")]

public string textboxcss

{

set

{

viewstate["textboxcss"]=value;

}

get

{

object obj=viewstate["textboxcss"];

return (obj==null)?string.empty:obj.tostring();

}

}

//where子句

[category("控件专有属性"),description("where子句,不带where"),defaultvalue("")]

public string where

{

get

{

object obj=viewstate["where"];

string newstype="type like %"+newstype+"%";

return (obj==null)?newstype:newstype+" and "+obj.tostring();

}

set

{

viewstate["where"]=value;

}

}

[category("控件专有属性"),description("新闻显示页面名称!")]

public string newsshowpage

{

get

{

object obj=viewstate["newsshowpage"];

return (obj==null)?string.empty:obj.tostring();

}

set

{

viewstate["newsshowpage"]=value;

}

}

[category("控件专有属性"),description("是否开放管理功能!")]

public manageswitch manageswitch

{

get

{

object obj=viewstate["manageswitch"];

return (obj==null)?manageswitch.off:(manageswitch)obj;

}

set

{

viewstate["manageswitch"]=value;

}

}

[category("控件专有属性"),description("编辑页文件名!")]

public string editpage

{

get

{

object obj=viewstate["editpage"];

return (obj==null)?string.empty:obj.tostring();

}

set

{

viewstate["editpage"]=value;

}

}

[category("控件专有属性"),description("删除页文件名!")]

public string deletepage

{

get

{

object obj=viewstate["deletepage"];

return (obj==null)?string.empty:obj.tostring();

}

set

{

viewstate["deletepage"]=value;

}

}

#endregion

/// <summary>

/// 将此控件呈现给指定的输出参数。

/// </summary>

/// <param name="output"> 要写出到的 html 编写器 </param>

protected override void render(htmltextwriter output)

{

if(page.enableviewstate==false)

page.enableviewstate=true;

if(site!=null && site.designmode)

createchildcontrols();

//databind();

base.render(output);

}

public override void databind()

{

base.databind();

childcontrolscreated = false;

if (connectionstring == "" || tablename == "")

return;

// fetch data

fetchdata();

// bind data to the buddy control

_rp.datasource = _datasource;

_rp.databind();

return;

}

private void errorshow(string errormessage)

{

httpcontext.current.response.write("<script language=javascript>window.alert(\""+errormessage+"\");</script>");

}

private void fetchdata()

{

#region

sqlconnection cn=new sqlconnection();

sqlcommand cm=new sqlcommand();

cm.connection=cn;

sqldataadapter adapter=new sqldataadapter();

try

{

cn.connectionstring=connectionstring;

cm.connection.open();

cm.commandtext="getrecordfrompage";

cm.commandtype=commandtype.storedprocedure;

cm.parameters.add("@tblname",sqldbtype.nvarchar,255);

cm.parameters.add("@fldname",sqldbtype.nvarchar,255);

cm.parameters.add("@pagesize",sqldbtype.int);

cm.parameters.add("@pageindex",sqldbtype.int);

cm.parameters.add("@iscount",sqldbtype.bit);

cm.parameters.add("@ordertype",sqldbtype.bit);

cm.parameters.add("@strwhere",sqldbtype.nvarchar,1000);

cm.parameters["@tblname"].value=tablename;

cm.parameters["@fldname"].value=fieldname;

cm.parameters["@pagesize"].value=pagesize;

cm.parameters["@pageindex"].value=pageindex;

cm.parameters["@iscount"].value=0;

cm.parameters["@ordertype"].value=sorttype;

cm.parameters["@strwhere"].value=where;

adapter.selectcommand=cm;

datatable dtb = new datatable();

adapter.fill(dtb);

cm.parameters["@iscount"].value=iscount;

recordcount=(int)cm.executescalar();

pagecount=(int)math.ceiling((double)recordcount/pagesize);

// configures the paged data source component

if (_datasource == null)

_datasource = new pageddatasource();

_datasource.allowcustompaging = true;

_datasource.allowpaging = true;

_datasource.currentpageindex = 0;

if(pageindex==pagecount)

{

_datasource.pagesize = (recordcount-(pageindex-1)*pagesize);

}

else

{

_datasource.pagesize = pagesize;

}

if(pageindex==pagecount)

{

_datasource.virtualcount = (recordcount-(pageindex-1)*pagesize);

}

else

{

_datasource.virtualcount = pagesize;

}

_datasource.datasource = dtb.defaultview;

}

catch

{

errorshow("从数据库取得数据时发生错误!");

}

finally

{

cm.connection.close();

cm.dispose();

cn.dispose();

adapter.dispose();

}

#endregion

}

protected override void createchildcontrols()

{

#region

try

{

controls.clear();

if(!page.ispostback)

{

clearchildviewstate();

}

//***********************************************

table table1=new table();

table1.width=unit.percentage(100);

table1.height=unit.percentage(100);

tablerow tr1=new tablerow();

tablecell td1=new tablecell();

td1.verticalalign=verticalalign.top;

td1.height=unit.percentage(100);

_rp.headertemplate=new mytemplate(listitemtype.header,tablecss,alternatecss,itemcss,newsshowpage,manageswitch,editpage,deletepage);

_rp.itemtemplate=new mytemplate(listitemtype.item,tablecss,alternatecss,itemcss,newsshowpage,manageswitch,editpage,deletepage);

_rp.alternatingitemtemplate=new mytemplate(listitemtype.alternatingitem,tablecss,alternatecss,itemcss,newsshowpage,manageswitch,editpage,deletepage);

_rp.footertemplate=new mytemplate(listitemtype.footer,tablecss,alternatecss,itemcss,newsshowpage,manageswitch,editpage,deletepage);

_rp.id="show";

//controls.add(_rp);

td1.controls.add(_rp);

tr1.cells.add(td1);

table1.rows.add(tr1);

tablerow tr2=new tablerow();

tablecell td2=new tablecell();

td2.verticalalign=verticalalign.bottom;

table table=new table();

table.width=unit.percentage(100);

table.cellpadding=0;

table.cellspacing=3;

table.borderwidth=0;

table.font.size=fontunit.point(10);

tablerow tr=new tablerow();

tablecell tdinfo=new tablecell();

tdinfo.width=unit.percentage(30);

tdinfo.horizontalalign=horizontalalign.left;

buildinfo(tdinfo);

tr.cells.add(tdinfo);

tablecell tdnavigate=new tablecell();

tdnavigate.width=unit.percentage(50);

tdnavigate.horizontalalign=horizontalalign.center;

buildnavigator(tdnavigate);

tr.cells.add(tdnavigate);

tablecell tdgoto=new tablecell();

tdgoto.width=unit.percentage(20);

tdgoto.horizontalalign=horizontalalign.right;

buildgoto(tdgoto);

tr.cells.add(tdgoto);

table.rows.add(tr);

td2.controls.add(table);

tr2.cells.add(td2);

table1.rows.add(tr2);

controls.add(table1);

//controls.add(table);

databind();

}

catch(exception ex)

{

errorshow("创建子控件时发生错误:"+ex.message);

}

#endregion

}

private void buildinfo(tablecell td)

{

literalcontrol lc=new literalcontrol();

lc.text="页码:"+pageindex.tostring()+"|"+pagecount.tostring()+" 记录:"+((pageindex-1)*pagesize+1)+"-"+((recordcount<pagesize)?recordcount:((pageindex==pagecount)?recordcount:pageindex*pagesize))+"|"+recordcount;

td.controls.add(lc);

}

private void buildnavigator(tablecell td)

{

#region

int temp;

if(pageindex>showpagenumber)

{

linkbutton lbback=new linkbutton();

lbback.causesvalidation=false;

lbback.text="…";

lbback.commandargument="back";

lbback.command +=new commandeventhandler(lb_click);

td.controls.add(lbback);

td.controls.add(new literalcontrol("&nbsp;"));

}

//*************************

for(int i=0;i<showpagenumber;i++)

{

if((pagestart+i)<=pagecount)

{

temp=pagestart+i;

linkbutton lbnumber=new linkbutton();

lbnumber.causesvalidation=false;

lbnumber.text=temp.tostring();

lbnumber.commandargument=temp.tostring();

lbnumber.command +=new commandeventhandler(lbnumber_click);

td.controls.add(lbnumber);

td.controls.add(new literalcontrol("&nbsp;"));

}

}

if((pagecount-pagestart)>showpagenumber)

{

linkbutton lbforward=new linkbutton();

lbforward.causesvalidation=false;

lbforward.text="…";

lbforward.commandargument="forward";

lbforward.command +=new commandeventhandler(lb_click);

td.controls.add(lbforward);

}

#endregion

}

private void buildgoto(tablecell td)

{

#region

textbox tb=new textbox();

tb.id="gotopage";

tb.borderwidth=unit.pixel(1);

tb.width=unit.pixel(30);

tb.cssclass=textboxcss;

tb.enableviewstate=true;

td.controls.add(tb);

literalcontrol lc=new literalcontrol("&nbsp;");

td.controls.add(lc);

button btn=new button();

btn.text="goto";

btn.cssclass=buttoncss;

btn.commandargument=tb.clientid;

btn.command +=new commandeventhandler(lb_click);

td.controls.add(btn);

requiredfieldvalidator val2=new requiredfieldvalidator();

val2.controltovalidate="gotopage";

val2.errormessage="页码不能为空!";

val2.display=validatordisplay.none;

val2.id="val2";

td.controls.add(val2);

rangevalidator val1=new rangevalidator();

val1.display=validatordisplay.none;

val1.errormessage="无效的页码!";

val1.id="val1";

val1.controltovalidate="gotopage";

val1.type=validationdatatype.integer;

val1.minimumvalue="1";

if(pagecount<1)

{

val1.maximumvalue="1";

}

else

{

val1.maximumvalue=pagecount.tostring();

}

td.controls.add(val1);

validationsummary valall=new validationsummary();

valall.showmessagebox=true;

valall.showsummary=false;

td.controls.add(valall);

#endregion

}

private void lb_click(object sender,commandeventargs e)

{

#region

switch(e.commandargument.tostring())

{

case "back":

pagestart-=showpagenumber;

pageindex=pagestart;

createchildcontrols();

break;

case "forward":

pagestart+=showpagenumber;

pageindex=pagestart;

createchildcontrols();

break;

default:

string temp=page.request.form[this.clientid+":gotopage"].tostring().trim();

try

{

pageindex=convert.toint32(temp);

if(pageindex % showpagenumber==0)

{

pagestart=pageindex+1-showpagenumber;

}

else

{

pagestart=(int)math.floor((double)pageindex/showpagenumber)*showpagenumber+1;

}

createchildcontrols();

}

catch

{

errorshow("翻页时发生错误!");

}

break;

}

databind();

#endregion

}

private void lbnumber_click(object sender,commandeventargs e)

{

pageindex=convert.toint32(e.commandargument);

databind();

}

}

public class mytemplate : itemplate

{

#region

listitemtype templatetype;

string tablecss="";

string alternatecss="";

string itemcss="";

string newsshowpage="";

string editpage="";

string deletepage="";

manageswitch _manageswitch;

public mytemplate(listitemtype type)

{

templatetype = type;

}

public mytemplate(listitemtype type,string tablecss,string alternatecss,string itemcss,string newsshowpage,manageswitch manageswitch,string editpage,string deletepage)

{

templatetype = type;

tablecss=tablecss;

alternatecss=alternatecss;

itemcss=itemcss;

newsshowpage=newsshowpage;

_manageswitch=manageswitch;

editpage=editpage;

deletepage=deletepage;

}

public void instantiatein(system.web.ui.control container)

{

literal lc = new literal();

switch(templatetype)

{

case listitemtype.header:

lc.text="<table cellspacing=\"0\" cellpadding=\"5\" class=\""+tablecss+"\">";

break;

case listitemtype.item:

lc.text="<tr><td class=\""+itemcss+"\">";

lc.databinding += new eventhandler(templatecontrol_databinding);

break;

case listitemtype.alternatingitem:

lc.text = "<tr><td class=\""+alternatecss+"\">";

lc.databinding += new eventhandler(templatecontrol_databinding);

break;;

case listitemtype.footer:

lc.text = "</table>";

break;

}

container.controls.add(lc);

}

private void templatecontrol_databinding(object sender,system.eventargs e)

{

string css="";

literal lc;

lc = (literal) sender;

repeateritem container = (repeateritem) lc.namingcontainer;

lc.text += "["+convert.tostring(databinder.eval(container.dataitem,"prefix")).trim()+"]&nbsp;"+databinder.eval(container.dataitem,"title","<a href=\""+newsshowpage+"?newsid="+databinder.eval(container.dataitem,"id")+"\" target=\"_blank\">{0}</a>")+"&nbsp;&nbsp;"+databinder.eval(container.dataitem,"pub_time","{0:yyyy-m-d}");

lc.text+="</td>";

if(_manageswitch==manageswitch.on)

{

switch(templatetype)

{

case listitemtype.item:

css=itemcss;

break;

case listitemtype.alternatingitem:

css=alternatecss;

break;;

}

lc.text+="<td class=\""+css+"\"><a href=\""+editpage+"?newsid="+databinder.eval(container.dataitem,"id")+"\" target=\"_blank\">编辑</a></td>";

lc.text+="<td class=\""+css+"\"><a href=\""+deletepage+"?newsid="+databinder.eval(container.dataitem,"id")+"\" target=\"_blank\">删除</a></td>";

}

lc.text+="</tr>";

}

#endregion

}

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 一个分页跟动态创建列的控件-.NET教程,组件控件开发
分享到: 更多 (0)

相关推荐

  • 暂无文章