using System;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
using System.Resources;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace DataGridPro
{
public class jjstarDataGrid: DataGrid,IPostBackEventHandler
{
[Category("²¼¾Ö"),Description("DataGridËùÔÚÈÝÆ÷¿í¶È¡£")]
public virtual Unit FrameWidth
{
get
{
object obj=ViewState["FrameWidth"];
return ((null ==obj ) ? Width : (Unit)obj);
}
set
{
ViewState["FrameWidth"] = value;
}
}
[Category("Íâ¹Û"),Description("Êó±êËùÔÚÐеÄÑÕÉ«¡£")]
[Editor(typeof(ColorEditor),typeof(UITypeEditor))]
public Color CurrentRowColor
{
get
{
object obj=ViewState["CurrentRowColor"];
return ((null ==obj ) ? BackColor : (Color)obj);
}
set
{
ViewState["CurrentRowColor"]=value;
}
}
[Category("Ñùʽ"),Description("DataGridµÄÏÔʾģʽ¡£")]
[TypeConverter(typeof(modeConverter))]
public string DisplayMode
{
get
{
object obj=ViewState["mode"];
return ((null ==obj ) ? "ScrollMode" : (string)obj);
}
set
{
ViewState["mode"]=value;
}
}
public event EventHandler Scroll2Foot;
public event EventHandler Scroll2Top;
public event DataGridItemEventHandler Click;
public event DataGridItemEventHandler DblClick;
protected void OnClick(int index)
{
if(null!=Click)
Click(this,new DataGridItemEventArgs(Items[index]));
}
protected void OnDblClick(int index)
{
if(null!=DblClick)
DblClick(this,new DataGridItemEventArgs(Items[index]));
}
protected void OnScroll2Foot()
{
if(null!=Scroll2Foot)
Scroll2Foot(this,new EventArgs());
}
protected void OnScroll2Top()
{
if(null!=Scroll2Top)
Scroll2Top(this,new EventArgs());
}
public void RaisePostBackEvent(string eventArgument)
{
if("SCROLLMODE"==DisplayMode.ToUpper())
{
if("SCROLL2TOP"==eventArgument.ToUpper())
{
OnScroll2Top();
return;
}
if("SCROLL2FOOT"==eventArgument.ToUpper())
{
OnScroll2Foot();
return;
}
}
if(eventArgument.StartsWith("CLK"))
{
eventArgument=
eventArgument.TrimStart(new Char[]{'C','L','K'});
OnClick(Convert.ToInt32(eventArgument));
return;
}
if(eventArgument.StartsWith("DBL"))
{
eventArgument=
eventArgument.TrimStart(new Char[]{'D','B','L'});
OnDblClick(Convert.ToInt32(eventArgument));
return;
}
}
protected override void OnItemDataBound(DataGridItemEventArgs e)
{
base.OnItemDataBound(e);
if((ListItemType.Pager==e.Item.ItemType)||
(ListItemType.Footer==e.Item.ItemType))
{
return;
}
if(ListItemType.Header!=e.Item.ItemType)
{
e.Item.Attributes["id"]=
e.Item.ItemType.ToString()+e.Item.ItemIndex.ToString();
e.Item.Attributes["OnMouseOut"]=
"javascript:bgColor='"+BackColor.Name.ToString()+"';";
e.Item.Attributes["OnMouseOver"]=
"javascript:bgColor='"+CurrentRowColor.Name.ToString()+"';"; e.Item.Attributes["OnDblClick"]=
"javascript:"+UniqueID+"_dbl("+e.Item.ItemIndex.ToString()+");";
e.Item.Attributes["OnClick"]=
"javascript:"+UniqueID+"_clk("+e.Item.ItemIndex.ToString()+");";
}
else
{
int cellCount=e.Item.Cells.Count;
for(int index=0;index<cellCount;index++)
{
e.Item.Cells[index].Attributes["id"]=
"HEADER"+index.ToString();
}
}
}
using System.Collections.Specialized;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
using System.Resources;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace DataGridPro
{
public class jjstarDataGrid: DataGrid,IPostBackEventHandler
{
[Category("²¼¾Ö"),Description("DataGridËùÔÚÈÝÆ÷¿í¶È¡£")]
public virtual Unit FrameWidth
{
get
{
object obj=ViewState["FrameWidth"];
return ((null ==obj ) ? Width : (Unit)obj);
}
set
{
ViewState["FrameWidth"] = value;
}
}
[Category("Íâ¹Û"),Description("Êó±êËùÔÚÐеÄÑÕÉ«¡£")]
[Editor(typeof(ColorEditor),typeof(UITypeEditor))]
public Color CurrentRowColor
{
get
{
object obj=ViewState["CurrentRowColor"];
return ((null ==obj ) ? BackColor : (Color)obj);
}
set
{
ViewState["CurrentRowColor"]=value;
}
}
[Category("Ñùʽ"),Description("DataGridµÄÏÔʾģʽ¡£")]
[TypeConverter(typeof(modeConverter))]
public string DisplayMode
{
get
{
object obj=ViewState["mode"];
return ((null ==obj ) ? "ScrollMode" : (string)obj);
}
set
{
ViewState["mode"]=value;
}
}
public event EventHandler Scroll2Foot;
public event EventHandler Scroll2Top;
public event DataGridItemEventHandler Click;
public event DataGridItemEventHandler DblClick;
protected void OnClick(int index)
{
if(null!=Click)
Click(this,new DataGridItemEventArgs(Items[index]));
}
protected void OnDblClick(int index)
{
if(null!=DblClick)
DblClick(this,new DataGridItemEventArgs(Items[index]));
}
protected void OnScroll2Foot()
{
if(null!=Scroll2Foot)
Scroll2Foot(this,new EventArgs());
}
protected void OnScroll2Top()
{
if(null!=Scroll2Top)
Scroll2Top(this,new EventArgs());
}
public void RaisePostBackEvent(string eventArgument)
{
if("SCROLLMODE"==DisplayMode.ToUpper())
{
if("SCROLL2TOP"==eventArgument.ToUpper())
{
OnScroll2Top();
return;
}
if("SCROLL2FOOT"==eventArgument.ToUpper())
{
OnScroll2Foot();
return;
}
}
if(eventArgument.StartsWith("CLK"))
{
eventArgument=
eventArgument.TrimStart(new Char[]{'C','L','K'});
OnClick(Convert.ToInt32(eventArgument));
return;
}
if(eventArgument.StartsWith("DBL"))
{
eventArgument=
eventArgument.TrimStart(new Char[]{'D','B','L'});
OnDblClick(Convert.ToInt32(eventArgument));
return;
}
}
protected override void OnItemDataBound(DataGridItemEventArgs e)
{
base.OnItemDataBound(e);
if((ListItemType.Pager==e.Item.ItemType)||
(ListItemType.Footer==e.Item.ItemType))
{
return;
}
if(ListItemType.Header!=e.Item.ItemType)
{
e.Item.Attributes["id"]=
e.Item.ItemType.ToString()+e.Item.ItemIndex.ToString();
e.Item.Attributes["OnMouseOut"]=
"javascript:bgColor='"+BackColor.Name.ToString()+"';";
e.Item.Attributes["OnMouseOver"]=
"javascript:bgColor='"+CurrentRowColor.Name.ToString()+"';"; e.Item.Attributes["OnDblClick"]=
"javascript:"+UniqueID+"_dbl("+e.Item.ItemIndex.ToString()+");";
e.Item.Attributes["OnClick"]=
"javascript:"+UniqueID+"_clk("+e.Item.ItemIndex.ToString()+");";
}
else
{
int cellCount=e.Item.Cells.Count;
for(int index=0;index<cellCount;index++)
{
e.Item.Cells[index].Attributes["id"]=
"HEADER"+index.ToString();
}
}
}
{
StringBuilder sbScript=new StringBuilder();
sbScript.Append("<script language='javascript'>")//;
//µ¥»÷±êÖ¾
.Append(
"var "+UniqueID+"_click=0;")
//Ë«»÷±êÖ¾
.Append(
"var "+UniqueID+"_dblclick=0;")
//±»µ¥»÷»òË«»÷µÄÐбêÖ¾
.Append(
"var "+UniqueID+"_row;")
//µ¥»÷ʼþ
.Append(
"function "+UniqueID+"_clk(row)")
.Append("{")
.Append(
"if((\"TD\"==event.srcElement.tagName)||(\"TR\"==event.srcElement.tagName))")
.Append("{")
.Append(UniqueID+"_click++;")
.Append(UniqueID+"_row=row;")
.Append(
"setTimeout('"+UniqueID+"_submit()',300)")
.Append("}")
.Append("}")
//Ë«»÷ʼþ
.Append(
"function "+UniqueID+"_dbl(row)")
.Append("{")
.Append(
"if((\"TD\"==event.srcElement.tagName)||(\"TR\"==event.srcElement.tagName))")
.Append("{")
.Append(UniqueID+"_dblclick++;")
.Append(UniqueID+"_row=row;")
.Append("}")
.Append("}")
//Ìá½»µ¥Ë«»÷ʼþ
.Append(
"function "+UniqueID+"_submit()")
.Append("{")
.Append(
"if((1=="+UniqueID+"_click)&&(1=="+UniqueID+"_dblclick))")
.Append("{");
if(true==canDblClick)
{
sbScript.Append(
"__doPostBack('"+UniqueID+"','DBL'+"+UniqueID+"_row);");
}
sbScript.Append("}")
.Append("else {");
if(true==canClick)
{
sbScript.Append(
"__doPostBack('"+UniqueID+"','CLK'+"+UniqueID+"_row);");
}
sbScript.Append("}")
//µ¥»÷±êÖ¾¸´Î»
.Append(
UniqueID+"_click=0;")
//Ë«»÷±êÖ¾¸´Î»
.Append(
UniqueID+"_dblclick=0;")
.Append("}")
.Append("</script>");
return sbScript.ToString();
}
{
StringBuilder sbScript=new StringBuilder();
sbScript.Append("<script language='javascript'>");
if(true==canScroll)
{
//±£´ædatagrid¸ß¶È
sbScript.Append(
"var "+UniqueID+"_dgHeight="
+UniqueID+"_sp.scrollHeight;")
//¹ö¶¯±íÉÏÑظ߶È
.Append(
UniqueID+"_rTop.style.height="
+CurrentPageIndex+"*"+UniqueID+"_dgHeight;");
//¹ö¶¯±íÏÂÑظ߶È
if(0==PageCount)
{
sbScript.Append(
UniqueID+"_rFoot.style.height=0;");
}
else
{
sbScript.Append(
UniqueID+"_rFoot.style.height="
+"("+PageCount+"-"+CurrentPageIndex+"-1)*"+UniqueID+"_dgHeight;");
}
//ÈÝÆ÷¸ß¶È
sbScript.Append(
UniqueID+"_sp.style.height="
+UniqueID+"_dgHeight+20;");
//¹ö¶¯ÌõλÖÃ
if(PageCount==CurrentPageIndex+1)
{
sbScript.Append(
UniqueID+"_sp.scrollTop="
+"100+"+UniqueID+"_dgHeight*"+CurrentPageIndex+";");
}
else
{
sbScript.Append(
UniqueID+"_sp.scrollTop="
+UniqueID+"_dgHeight*"+CurrentPageIndex+";");
}
//±£´æ¹ö¶¯ÌõλÖÃ
sbScript.Append(
"var "+UniqueID+"_scrollPos="+UniqueID+"_sp.scrollTop;")
//¹ö¶¯Ê¼þ±ê־Ϊδ´¥·¢
.Append("var "+UniqueID+"_scrolled=0;");
}
else
{
//δ·ÖÒ³£¬²»ÏÔʾ´¹Ö±¹ö¶¯Ìõ
sbScript.Append(
UniqueID+"_sp.style.height="
+UniqueID+"_sp.scrollHeight+20;");
}
sbScript.Append("</script>");
return sbScript.ToString();
}
{
StringBuilder sbScript=new StringBuilder();
//´¦Àí¹ö¶¯Ê¼þ
sbScript.Append("<script language='javascript'>")
.Append("function "+UniqueID+"_scroll()")
.Append("{");
if(true==canScroll)
{
sbScript.Append("if(1=="+UniqueID+"_scrolled) return;")
.Append("var "+UniqueID+"_currentPos="
+UniqueID+"_sp.scrollTop;")
//¹ö¶¯·¢ÉúÁËÂð£¿
.Append(
"if("+UniqueID+"_currentPos!="+UniqueID+"_scrollPos)")
.Append("{")
.Append(UniqueID+"_rTop.style.height=0;")
.Append(UniqueID+"_rFoot.style.height=0;")
//¹ö¶¯Ê¼þ±ê־ΪÒÑ´¥·¢
.Append(UniqueID+"_scrolled=1;")
.Append(
"if("+UniqueID+"_currentPos>"+UniqueID+"_scrollPos)")
.Append("{")
//Ìá½»ÏòϹö¶¯Ê¼þ
.Append(
Page.GetPostBackEventReference(this,"scroll2foot")+";")
.Append("}")
.Append("else{")
//Ìá½»ÏòÉϹö¶¯Ê¼þ
.Append(
Page.GetPostBackEventReference(this,"scroll2top")+";")
.Append("}")
.Append("}");
}
sbScript.Append("}")
.Append("</script>");
return sbScript.ToString();
}
protected override void OnPreRender(EventArgs e)
{
Page.GetPostBackEventReference(this);
//×¢²áµ¥»÷Ë«»÷ʼþ½Å±¾
Page.RegisterStartupScript(
UniqueID+"clickScript",
clickScript((null==Click)?false:true,(null==DblClick)?false:true));
if("SCROLLMODE"==DisplayMode.ToUpper())
{
//×¢²á¹ö¶¯±íÃèÊö½Å±¾
Page.RegisterStartupScript(
UniqueID+"scrollTableScript",
scrollTableScript(AllowPaging));
//×¢²á¹ö¶¯Ê¼þ½Å±¾
Page.RegisterStartupScript(
UniqueID+"scrollEventScript",
scrollEventScript(AllowPaging));
}
}
protected override void Render(HtmlTextWriter output)
{
//ͨ¹ýÊôÐÔDisplayModeÅжÏDataGridµÄ³ÊÏÖģʽ
if("SCROLLMODE"==DisplayMode.ToUpper())
{
//»­ÈÝÆ÷£¨ÓÃÀ´ÈÝÄÉdatagrid£©
output.Write(
"<div id='"+UniqueID+"_sp' "
+"style='OVERFLOW: auto; "
+"WIDTH:"+FrameWidth.Value.ToString()+"; "
//StyleûÓÐË÷ÒýÆ÷£¬
//ËùÒÔÎÒûÄÜ°ÑËùÓÐÑùʽ¸´ÖƹýÀ´
//ÄÄλ´óÏÀÄÜ°ïÎÒ
+"LEFT:"+Style["LEFT"]+"; "
+"TOP:"+Style["TOP"]+"; "
+"POSITION:"+Style["POSITION"]+"; "
+"Z-INDEX:"+Style["Z-INDEX"]+"; "
+"' "
//Õâ¸öonscroll²»ÓÃtry/catch°üÆðÀ´
//¾Í»á±¨´í
//Ϊʲô»áÕâÑù£¿
//+"onscroll='"+UniqueID+"_scroll()'>");
+"onscroll='try{"+UniqueID+"_scroll()}catch(e){}'>");
//»­¹ö¶¯±í
output.Write(
"<table id='"+UniqueID+"_table' "
+"style='WIDTH:"+FrameWidth.Value.ToString()+"; "
+"'>");
//»­¹ö¶¯±íÉÏÑØ
output.Write(
"<tr id='"+UniqueID+"_rTop' "
+"style='HEIGHT:0; WIDTH:"+FrameWidth.Value.ToString()
+"'><td/></tr>");
//datagridËùÔÚλÖÃ
output.Write(
"<tr id='"+UniqueID+"_rDG' "
+"style='WIDTH:"+FrameWidth.Value.ToString()
+"'><td>");
//ÇåÀídatagridÔ­ÓÐÊôÐÔ
Style["LEFT"]="0";
Style["TOP"]="0";
Style["POSITION"]="relative";
PagerStyle.Visible=false;
//Êä³ödatagrid
base.Render(output);
output.Write("</td></tr>");
//»­¹ö¶¯±íÏÂÑØ
output.Write(
"<tr id='"+UniqueID+"_rFoot' "
+"style='HEIGHT:0; WIDTH:"+FrameWidth.Value.ToString()
+"'><td/></tr></table>");
//»­ÈÝÆ÷½áÊø
output.Write("</div>");
}
else
{
//Ö»Êä³ödatagrid
base.Render(output);
}
}
{
public modeConverter(){}
/// <summary>
/// ´æ´¢ÒªÌṩµÄËùÓбê×¼Öµ¡£
/// </summary>
private static StandardValuesCollection _modeList;
/// <summary>
/// »ñÈ¡±ê×¼Öµ¡£
/// </summary>
/// <returns>
/// ±ê×¼Öµ¡£
/// </returns>
private StandardValuesCollection getModeList()
{
if(null==_modeList)
{
string[] mode=new string[]{"OriginalMode","ScrollMode"};
_modeList=new StandardValuesCollection(mode);
}
return _modeList;
}
/// <summary></summary>
/// <param name="context"></param>
/// <returns>
/// ·µ»Øtrue£¬±íʾÌṩ±ê×¼Öµ¡£
/// </returns>
public override bool
GetStandardValuesSupported(ITypeDescriptorContext context)
{return true;}
/// <summary></summary>
/// <param name="context"></param>
/// <returns>
/// ·µ»Øtrue£¬
/// ±íʾ±ê×¼ÖµÖ»ÄÜͨ¹ýÏÂÀ­ÁбíÑ¡Ôñ¡£
/// </returns>
public override bool
GetStandardValuesExclusive(ITypeDescriptorContext context)
{return true;}
/// <summary>
/// ·µ»ØÒªÔÚÏÂÀ­ÁбíÖÐÌṩµÄ±ê×¼Öµ¡£
/// </summary>
/// <param name="context"></param>
/// <returns>
/// ÔÚÏÂÀ­ÁбíÖÐÌṩµÄ±ê×¼Öµ¡£
/// </returns>
public override StandardValuesCollection
GetStandardValues(ITypeDescriptorContext context)
{
return getModeList();
}
}
#endregion
}
}
至于记录数,我不明白你取它的用意是什么,是所有的记录数还是当前页的记录数?(因为你有一个 每页显示的记录数),如果你要的是所有的记录数,可以参考:
((DataTable)DataGrid1.Datasource).Rows.Count;
选择每页显示的数目,你可以用DropDownList与Button配合去实现
方法很多,多试试吧