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();
        }
      }
    }

解决方案 »

  1.   

    private string clickScript(bool canClick,bool canDblClick)
        {
          StringBuilder sbScript=new StringBuilder();
          sbScript.Append("<script language='javascript'>")//;
            //&micro;&yen;&raquo;÷±ê&Ouml;&frac34;
            .Append(
            "var "+UniqueID+"_click=0;")
            //&Euml;&laquo;&raquo;÷±ê&Ouml;&frac34;
            .Append(
            "var "+UniqueID+"_dblclick=0;")
            //±&raquo;&micro;&yen;&raquo;÷&raquo;ò&Euml;&laquo;&raquo;÷&micro;&Auml;&ETH;&ETH;±ê&Ouml;&frac34;
            .Append(
            "var "+UniqueID+"_row;")
            //&micro;&yen;&raquo;÷&Ecirc;&Acirc;&frac14;&thorn;
            .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("}")
            //&Euml;&laquo;&raquo;÷&Ecirc;&Acirc;&frac14;&thorn;
            .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("}")
            //&Igrave;á&frac12;&raquo;&micro;&yen;&Euml;&laquo;&raquo;÷&Ecirc;&Acirc;&frac14;&thorn;
            .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("}")
            //&micro;&yen;&raquo;÷±ê&Ouml;&frac34;&cedil;&acute;&Icirc;&raquo;
            .Append(
            UniqueID+"_click=0;")
            //&Euml;&laquo;&raquo;÷±ê&Ouml;&frac34;&cedil;&acute;&Icirc;&raquo;
            .Append(
            UniqueID+"_dblclick=0;")
            .Append("}")
            .Append("</script>");
          return sbScript.ToString();
        }
      

  2.   

    你放控件上去,动态修改pageindex等属性,重新绑定应该可以
      

  3.   

    private string scrollTableScript(bool canScroll)
        {
          StringBuilder sbScript=new StringBuilder();
          sbScript.Append("<script language='javascript'>");
          if(true==canScroll)
          {
            //±&pound;&acute;&aelig;datagrid&cedil;&szlig;&para;&Egrave;
            sbScript.Append(
              "var "+UniqueID+"_dgHeight="
              +UniqueID+"_sp.scrollHeight;")
              //&sup1;&ouml;&para;&macr;±í&Eacute;&Iuml;&Ntilde;&Oslash;&cedil;&szlig;&para;&Egrave;
              .Append(
              UniqueID+"_rTop.style.height="
              +CurrentPageIndex+"*"+UniqueID+"_dgHeight;");
            //&sup1;&ouml;&para;&macr;±í&Iuml;&Acirc;&Ntilde;&Oslash;&cedil;&szlig;&para;&Egrave;
            if(0==PageCount)
            {
              sbScript.Append(
                UniqueID+"_rFoot.style.height=0;");
            }
            else
            {
              sbScript.Append(
                UniqueID+"_rFoot.style.height="
                +"("+PageCount+"-"+CurrentPageIndex+"-1)*"+UniqueID+"_dgHeight;");
            }
            //&Egrave;&Yacute;&AElig;÷&cedil;&szlig;&para;&Egrave;
            sbScript.Append(
              UniqueID+"_sp.style.height="
              +UniqueID+"_dgHeight+20;");
            //&sup1;&ouml;&para;&macr;&Igrave;&otilde;&Icirc;&raquo;&Ouml;&Atilde;
            if(PageCount==CurrentPageIndex+1)
            {
              sbScript.Append(
                UniqueID+"_sp.scrollTop="
                +"100+"+UniqueID+"_dgHeight*"+CurrentPageIndex+";");
            }
            else
            {
              sbScript.Append(
                UniqueID+"_sp.scrollTop="
                +UniqueID+"_dgHeight*"+CurrentPageIndex+";");
            }
            //±&pound;&acute;&aelig;&sup1;&ouml;&para;&macr;&Igrave;&otilde;&Icirc;&raquo;&Ouml;&Atilde;
            sbScript.Append(
              "var "+UniqueID+"_scrollPos="+UniqueID+"_sp.scrollTop;")
              //&sup1;&ouml;&para;&macr;&Ecirc;&Acirc;&frac14;&thorn;±ê&Ouml;&frac34;&Icirc;&ordf;&Icirc;&acute;&acute;&yen;·&cent;
              .Append("var "+UniqueID+"_scrolled=0;");
          }
          else
          {
            //&Icirc;&acute;·&Ouml;&Ograve;&sup3;&pound;&not;&sup2;&raquo;&Iuml;&Ocirc;&Ecirc;&frac34;&acute;&sup1;&Ouml;±&sup1;&ouml;&para;&macr;&Igrave;&otilde;
            sbScript.Append(
              UniqueID+"_sp.style.height="
              +UniqueID+"_sp.scrollHeight+20;");
          }
          sbScript.Append("</script>");
          return sbScript.ToString();
        }
      

  4.   

    private string scrollEventScript(bool canScroll)
        {
          StringBuilder sbScript=new StringBuilder();
          //&acute;&brvbar;&Agrave;í&sup1;&ouml;&para;&macr;&Ecirc;&Acirc;&frac14;&thorn;
          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;")
              //&sup1;&ouml;&para;&macr;·&cent;&Eacute;ú&Aacute;&Euml;&Acirc;&eth;&pound;&iquest;
              .Append(
              "if("+UniqueID+"_currentPos!="+UniqueID+"_scrollPos)")
              .Append("{")
              .Append(UniqueID+"_rTop.style.height=0;")
              .Append(UniqueID+"_rFoot.style.height=0;")
              //&sup1;&ouml;&para;&macr;&Ecirc;&Acirc;&frac14;&thorn;±ê&Ouml;&frac34;&Icirc;&ordf;&Ograve;&Ntilde;&acute;&yen;·&cent;
              .Append(UniqueID+"_scrolled=1;")
              .Append(
              "if("+UniqueID+"_currentPos>"+UniqueID+"_scrollPos)")
              .Append("{")
              //&Igrave;á&frac12;&raquo;&Iuml;ò&Iuml;&Acirc;&sup1;&ouml;&para;&macr;&Ecirc;&Acirc;&frac14;&thorn;
              .Append(
              Page.GetPostBackEventReference(this,"scroll2foot")+";")
              .Append("}")
              .Append("else{")
              //&Igrave;á&frac12;&raquo;&Iuml;ò&Eacute;&Iuml;&sup1;&ouml;&para;&macr;&Ecirc;&Acirc;&frac14;&thorn;
              .Append(
              Page.GetPostBackEventReference(this,"scroll2top")+";")
              .Append("}")
              .Append("}");
          }
          sbScript.Append("}")
            .Append("</script>");
          return sbScript.ToString();
        }
        protected override void OnPreRender(EventArgs e)
        {
          Page.GetPostBackEventReference(this);
          //×&cent;&sup2;á&micro;&yen;&raquo;÷&Euml;&laquo;&raquo;÷&Ecirc;&Acirc;&frac14;&thorn;&frac12;&Aring;±&frac34;
          Page.RegisterStartupScript(
            UniqueID+"clickScript",
            clickScript((null==Click)?false:true,(null==DblClick)?false:true));
          if("SCROLLMODE"==DisplayMode.ToUpper())
          {
            //×&cent;&sup2;á&sup1;&ouml;&para;&macr;±í&Atilde;è&Ecirc;&ouml;&frac12;&Aring;±&frac34;
            Page.RegisterStartupScript(
              UniqueID+"scrollTableScript",
              scrollTableScript(AllowPaging));
            //×&cent;&sup2;á&sup1;&ouml;&para;&macr;&Ecirc;&Acirc;&frac14;&thorn;&frac12;&Aring;±&frac34;
            Page.RegisterStartupScript(
              UniqueID+"scrollEventScript",
              scrollEventScript(AllowPaging));
          }
        }
    protected override void Render(HtmlTextWriter output)
        {
          //&Iacute;¨&sup1;&yacute;&Ecirc;&ocirc;&ETH;&Ocirc;DisplayMode&Aring;&ETH;&para;&Iuml;DataGrid&micro;&Auml;&sup3;&Ecirc;&Iuml;&Ouml;&Auml;&pound;&Ecirc;&frac12;
          if("SCROLLMODE"==DisplayMode.ToUpper())
          {
            //&raquo;&shy;&Egrave;&Yacute;&AElig;÷&pound;¨&Oacute;&Atilde;&Agrave;&acute;&Egrave;&Yacute;&Auml;&Eacute;datagrid&pound;&copy;
            output.Write(
              "<div id='"+UniqueID+"_sp' "
              +"style='OVERFLOW: auto; "
              +"WIDTH:"+FrameWidth.Value.ToString()+"; "
              //Style&Atilde;&raquo;&Oacute;&ETH;&Euml;÷&Ograve;&yacute;&AElig;÷&pound;&not;
              //&Euml;ù&Ograve;&Ocirc;&Icirc;&Ograve;&Atilde;&raquo;&Auml;&Uuml;°&Ntilde;&Euml;ù&Oacute;&ETH;&Ntilde;ù&Ecirc;&frac12;&cedil;&acute;&Ouml;&AElig;&sup1;&yacute;&Agrave;&acute;
              //&Auml;&Auml;&Icirc;&raquo;&acute;ó&Iuml;&Agrave;&Auml;&Uuml;°&iuml;&Icirc;&Ograve;
              +"LEFT:"+Style["LEFT"]+"; "
              +"TOP:"+Style["TOP"]+"; "
              +"POSITION:"+Style["POSITION"]+"; "
              +"Z-INDEX:"+Style["Z-INDEX"]+"; "
              +"' "
              //&Otilde;&acirc;&cedil;&ouml;onscroll&sup2;&raquo;&Oacute;&Atilde;try/catch°ü&AElig;&eth;&Agrave;&acute;
              //&frac34;&Iacute;&raquo;ᱨ&acute;í
              //&Icirc;&ordf;&Ecirc;&sup2;&Atilde;&acute;&raquo;á&Otilde;&acirc;&Ntilde;ù&pound;&iquest;
              //+"onscroll='"+UniqueID+"_scroll()'>");
              +"onscroll='try{"+UniqueID+"_scroll()}catch(e){}'>");
            //&raquo;&shy;&sup1;&ouml;&para;&macr;±í
            output.Write(
              "<table id='"+UniqueID+"_table' "
              +"style='WIDTH:"+FrameWidth.Value.ToString()+"; "
              +"'>");
            //&raquo;&shy;&sup1;&ouml;&para;&macr;±í&Eacute;&Iuml;&Ntilde;&Oslash;
            output.Write(
              "<tr id='"+UniqueID+"_rTop' "
              +"style='HEIGHT:0; WIDTH:"+FrameWidth.Value.ToString()
              +"'><td/></tr>");
            //datagrid&Euml;ù&Ocirc;&Uacute;&Icirc;&raquo;&Ouml;&Atilde;
            output.Write(
              "<tr id='"+UniqueID+"_rDG' "
              +"style='WIDTH:"+FrameWidth.Value.ToString()
              +"'><td>");
            //&Ccedil;&aring;&Agrave;ídatagrid&Ocirc;&shy;&Oacute;&ETH;&Ecirc;&ocirc;&ETH;&Ocirc;
            Style["LEFT"]="0";
            Style["TOP"]="0";
            Style["POSITION"]="relative";
            PagerStyle.Visible=false;
            //&Ecirc;&auml;&sup3;&ouml;datagrid
            base.Render(output);
            output.Write("</td></tr>");
            //&raquo;&shy;&sup1;&ouml;&para;&macr;±í&Iuml;&Acirc;&Ntilde;&Oslash;
            output.Write(
              "<tr id='"+UniqueID+"_rFoot' "
              +"style='HEIGHT:0; WIDTH:"+FrameWidth.Value.ToString()
              +"'><td/></tr></table>");
            //&raquo;&shy;&Egrave;&Yacute;&AElig;÷&frac12;á&Ecirc;&oslash;
            output.Write("</div>");
          }
          else
          {
            //&Ouml;&raquo;&Ecirc;&auml;&sup3;&ouml;datagrid
            base.Render(output);
          }
        }
      

  5.   

    public class modeConverter:TypeConverter
        {
          public modeConverter(){}
          /// <summary>
          /// &acute;&aelig;&acute;&cent;&Ograve;&ordf;&Igrave;á&sup1;&copy;&micro;&Auml;&Euml;ù&Oacute;&ETH;±ê×&frac14;&Ouml;&micro;&iexcl;&pound;
          /// </summary>
          private static StandardValuesCollection _modeList;
          /// <summary>
          /// &raquo;&ntilde;&Egrave;&iexcl;±ê×&frac14;&Ouml;&micro;&iexcl;&pound;
          /// </summary>
          /// <returns>
          /// ±ê×&frac14;&Ouml;&micro;&iexcl;&pound;
          /// </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>
          /// ·&micro;&raquo;&Oslash;true&pound;&not;±í&Ecirc;&frac34;&Igrave;á&sup1;&copy;±ê×&frac14;&Ouml;&micro;&iexcl;&pound;
          /// </returns>
          public override bool 
            GetStandardValuesSupported(ITypeDescriptorContext context)
          {return true;}
          /// <summary></summary>
          /// <param name="context"></param>
          /// <returns>
          /// ·&micro;&raquo;&Oslash;true&pound;&not;
          /// ±í&Ecirc;&frac34;±ê×&frac14;&Ouml;&micro;&Ouml;&raquo;&Auml;&Uuml;&Iacute;¨&sup1;&yacute;&Iuml;&Acirc;&Agrave;&shy;&Aacute;&ETH;±í&Ntilde;&iexcl;&Ocirc;&ntilde;&iexcl;&pound;
          /// </returns>
          public override bool 
            GetStandardValuesExclusive(ITypeDescriptorContext context)
          {return true;}
          /// <summary>
          /// ·&micro;&raquo;&Oslash;&Ograve;&ordf;&Ocirc;&Uacute;&Iuml;&Acirc;&Agrave;&shy;&Aacute;&ETH;±í&Ouml;&ETH;&Igrave;á&sup1;&copy;&micro;&Auml;±ê×&frac14;&Ouml;&micro;&iexcl;&pound;
          /// </summary>
          /// <param name="context"></param>
          /// <returns>
          /// &Ocirc;&Uacute;&Iuml;&Acirc;&Agrave;&shy;&Aacute;&ETH;±í&Ouml;&ETH;&Igrave;á&sup1;&copy;&micro;&Auml;±ê×&frac14;&Ouml;&micro;&iexcl;&pound;
          /// </returns>
          public override StandardValuesCollection 
            GetStandardValues(ITypeDescriptorContext context)
          {
            return getModeList();
          }
        }
    #endregion
      }
    }
      

  6.   

    To goody9807() 先谢谢你这么热情的写这么多,我不知道他们之间的关系,请给一点说明,我正在努力看,呵呵。谢谢你
      

  7.   

    goody9807()把源代码都写给你了!真热心,象你学习!:)
      

  8.   

    你的重点还是在PageIndex上,就象 latahu(邋遢胡)所说,可以放一个LinkButton在里面设置PageIndex值,重新绑定DataGrid,应该是可以的。
    至于记录数,我不明白你取它的用意是什么,是所有的记录数还是当前页的记录数?(因为你有一个 每页显示的记录数),如果你要的是所有的记录数,可以参考:
    ((DataTable)DataGrid1.Datasource).Rows.Count; 
    选择每页显示的数目,你可以用DropDownList与Button配合去实现
    方法很多,多试试吧