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
{
///
1<summary>
2/// coolPager 的摘要说明。
3/// </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>
")]
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
///
1<summary>
2/// 将此控件呈现给指定的输出参数。
3/// </summary>
///
1<param name="output"/>
要写出到的 HTML 编写器
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("
1<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
1<pagesize)?recordcount:((pageindex==pagecount)?recordcount:pageindex*pagesize))+"|"+recordcount; #region="" buildnavigator(tablecell="" if(pageindex="" int="" private="" td)="" td.controls.add(lc);="" temp;="" void="" {="" }="">showPageNumber)
2{
3LinkButton lbBack=new LinkButton();
4lbBack.CausesValidation=false;
5lbBack.Text="...";
6lbBack.CommandArgument="Back";
7lbBack.Command +=new CommandEventHandler(lb_Click);
8td.Controls.Add(lbBack);
9td.Controls.Add(new LiteralControl(" "));
10}
11//*************************
12for(int i=0;i<showpagenumber;i++) +="new" commandeventhandler(lbnumber_click);="" if((pagecount-pagestart)="" if((pagestart+i)<="pageCount)" lbnumber="new" lbnumber.causesvalidation="false;" lbnumber.command="" lbnumber.commandargument="temp.ToString();" lbnumber.text="temp.ToString();" linkbutton="" linkbutton();="" literalcontrol(" "));="" td.controls.add(lbnumber);="" td.controls.add(new="" temp="pageStart+i;" {="" }="">showPageNumber)
13{
14LinkButton lbForward=new LinkButton();
15lbForward.CausesValidation=false;
16lbForward.Text="...";
17lbForward.CommandArgument="Forward";
18lbForward.Command +=new CommandEventHandler(lb_Click);
19td.Controls.Add(lbForward);
20}
21#endregion
22}
23private void BuildGOTO(TableCell td)
24{
25#region
26TextBox tb=new TextBox();
27tb.ID="gotoPage";
28tb.BorderWidth=Unit.Pixel(1);
29tb.Width=Unit.Pixel(30);
30tb.CssClass=textboxCSS;
31tb.EnableViewState=true;
32td.Controls.Add(tb);
33
34LiteralControl lc=new LiteralControl(" ");
35td.Controls.Add(lc);
36
37Button btn=new Button();
38btn.Text="GOTO";
39btn.CssClass=buttonCSS;
40btn.CommandArgument=tb.ClientID;
41btn.Command +=new CommandEventHandler(lb_Click);
42td.Controls.Add(btn);
43
44RequiredFieldValidator val2=new RequiredFieldValidator();
45val2.ControlToValidate="gotoPage";
46val2.ErrorMessage="页码不能为空!";
47val2.Display=ValidatorDisplay.None;
48val2.ID="val2";
49td.Controls.Add(val2);
50
51RangeValidator val1=new RangeValidator();
52val1.Display=ValidatorDisplay.None;
53val1.ErrorMessage="无效的页码!";
54val1.ID="val1";
55val1.ControlToValidate="gotoPage";
56val1.Type=ValidationDataType.Integer;
57val1.MinimumValue="1";
58if(pageCount<1)
59{
60val1.MaximumValue="1";
61}
62else
63{
64val1.MaximumValue=pageCount.ToString();
65}
66
67td.Controls.Add(val1);
68
69ValidationSummary valAll=new ValidationSummary();
70valAll.ShowMessageBox=true;
71valAll.ShowSummary=false;
72td.Controls.Add(valAll);
73#endregion
74}
75private void lb_Click(Object Sender,CommandEventArgs e)
76{
77#region
78switch(e.CommandArgument.ToString())
79{
80case "Back":
81pageStart-=showPageNumber;
82pageIndex=pageStart;
83CreateChildControls();
84break;
85case "Forward":
86pageStart+=showPageNumber;
87pageIndex=pageStart;
88CreateChildControls();
89break;
90default:
91string temp=Page.Request.Form[this.ClientID+":gotoPage"].ToString().Trim();
92try
93{
94pageIndex=Convert.ToInt32(temp);
95if(pageIndex % showPageNumber==0)
96{
97pageStart=pageIndex+1-showPageNumber;
98}
99else
100{
101pageStart=(int)Math.Floor((double)pageIndex/showPageNumber)*showPageNumber+1;
102}
103CreateChildControls();
104}
105catch
106{
107ErrorShow("翻页时发生错误!");
108}
109break;
110}
111DataBind();
112#endregion
113}
114private void lbNumber_Click(Object Sender,CommandEventArgs e)
115{
116pageIndex=Convert.ToInt32(e.CommandArgument);
117DataBind();
118}
119}
120public class MyTemplate : ITemplate
121{
122#region
123ListItemType templateType;
124string tableCSS="";
125string alternateCSS="";
126string itemCSS="";
127string newsShowPage="";
128string editPage="";
129string deletePage="";
130ManageSwitch _manageSwitch;
131
132public MyTemplate(ListItemType type)
133{
134templateType = type;
135}
136public MyTemplate(ListItemType type,string TableCSS,string AlternateCSS,string ItemCSS,string NewsShowPage,ManageSwitch manageSwitch,string EditPage,string DeletePage)
137{
138templateType = type;
139tableCSS=TableCSS;
140alternateCSS=AlternateCSS;
141itemCSS=ItemCSS;
142newsShowPage=NewsShowPage;
143_manageSwitch=manageSwitch;
144editPage=EditPage;
145deletePage=DeletePage;
146}
147
148
149public void InstantiateIn(System.Web.UI.Control container)
150{
151Literal lc = new Literal();
152switch(templateType)
153{
154case ListItemType.Header:
155lc.Text="<table cellpadding='\"5\"' cellspacing='\"0\"' class='\""+tableCSS+"\"'>";
156break;
157case ListItemType.Item:
158lc.Text="<tr><td class='\""+itemCSS+"\"'>";
159lc.DataBinding += new EventHandler(TemplateControl_DataBinding);
160break;
161case ListItemType.AlternatingItem:
162lc.Text = "<tr><td class='\""+alternateCSS+"\"'>";
163lc.DataBinding += new EventHandler(TemplateControl_DataBinding);
164break;;
165case ListItemType.Footer:
166lc.Text = "</td></tr></td></tr></table>";
167break;
168}
169container.Controls.Add(lc);
170}
171private void TemplateControl_DataBinding(object sender,System.EventArgs e)
172{
173string css="";
174Literal lc;
175lc = (Literal) sender;
176RepeaterItem container = (RepeaterItem) lc.NamingContainer;
177lc.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}");
178lc.Text+="";
179if(_manageSwitch==ManageSwitch.ON)
180{
181switch(templateType)
182{
183case ListItemType.Item:
184css=itemCSS;
185break;
186case ListItemType.AlternatingItem:
187css=alternateCSS;
188break;;
189}
190lc.Text+="<td class='\""+css+"\"'><a href='\""+editPage+"?NEWSID="+DataBinder.Eval(container.DataItem,"ID")+"\"' target='\"_blank\"'>编辑</a></td>";
191lc.Text+="<td class='\""+css+"\"'><a href='\""+deletePage+"?NEWSID="+DataBinder.Eval(container.DataItem,"ID")+"\"' target='\"_blank\"'>删除</a></td>";
192}
193lc.Text+="";
194}
195#endregion
196}
197}</showpagenumber;i++)></pagesize)?recordcount:((pageindex==pagecount)?recordcount:pageindex*pagesize))+"|"+recordcount;>