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(" "));
}
//*************************
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(" "));
}
}
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(" ");
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()+"] "+databinder.eval(container.dataitem,"title","<a href=\""+newsshowpage+"?newsid="+databinder.eval(container.dataitem,"id")+"\" target=\"_blank\">{0}</a>")+" "+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
}
}
