namespace DasMS.WebUI.Commom
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
/// <summary>
/// DasGrid 的摘要说明。
/// </summary>
public abstract class DasGrid : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label CountPage;
protected System.Web.UI.WebControls.Button btnGo;
protected System.Web.UI.WebControls.Label lbPage;
protected System.Web.UI.WebControls.LinkButton btnLast;
protected System.Web.UI.WebControls.LinkButton btnNext;
protected System.Web.UI.WebControls.LinkButton btnPrev;
protected System.Web.UI.WebControls.LinkButton btnFirst;
protected System.Web.UI.WebControls.Panel Panel1;
public System.Web.UI.WebControls.DataGrid MainGrid;
protected System.Web.UI.HtmlControls.HtmlInputText select_index;
protected System.Web.UI.WebControls.TextBox Current;
protected System.Web.UI.WebControls.LinkButton LinkButton1;
protected System.Web.UI.HtmlControls.HtmlInputHidden toback;
protected System.Web.UI.WebControls.LinkButton flash;
protected System.Web.UI.WebControls.Label Label1;
//数据源
protected object iobject_DataSource; //数据唯一标识
protected string iobject_PID;
//状态标志 btndo翻页按纽是否动作! 
protected bool btndo=false; //状态标志 currentRow存储选定行!
public static int currentRow=-1;

//状态标志 currentPage存储选定页!
protected static int currentPage=0;
        
/// <summary>
/// page_Load
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Page_Load(object sender, System.EventArgs e)

if (!this.IsPostBack)
{
this.btnFirst.Enabled=false;
this.btnPrev.Enabled=false;  
this.DataGrid_Init();
this.DataBind();
this.DasGrid_DataBind();
} //判断查询数据是否大于500条
if(MainGrid.PageCount>500)
{
Label1.Text="提示:查询数据超过500条,请更换查询条件";
Label1.ForeColor=System.Drawing.Color.Red;
Label1.Font.Size=8;
Label1.Font.Name="verdana";
}
} /// <summary>
/// 数据源
/// </summary>
public object DataSource
{
set
{
this.iobject_DataSource = value;
}
} /// <summary>
/// 数据唯一标识
/// </summary>
public string PID
{
set
{
this.iobject_PID = value;
}
}

/// <summary>
/// 获取选定项的ID,DasGrid主键
/// </summary>
public string getSelectID
{
get
{
return this.toback.Value.ToString();
}
} public int setCurrentPage
{
set
{
MainGrid.CurrentPageIndex = value;
}
}
/// <summary>
/// 定义DATAGRID控件的外观!
/// </summary>
protected void DataGrid_Init()
{
MainGrid.SelectedIndex=-1;
// 在此处放置用户代码以初始化页面 MainGrid.PageSize = 4;
//边框颜色
MainGrid.BorderColor = System.Drawing.Color.FromName("#8E8E86");
MainGrid.ItemStyle.BorderColor = System.Drawing.Color.FromName("#BEBFBA");
//标识MainGrid的主键!
MainGrid.DataKeyField="ID";
MainGrid.BorderStyle = System.Web.UI.WebControls.BorderStyle.None;      
//personalized GridLines
MainGrid.GridLines = GridLines.Both; 
MainGrid.BackColor = System.Drawing.Color.FromName("#aaccff");
//personalized SelectedItemStyle
//设置选择项的样式
//MainGrid.SelectedItemStyle.Font.Name = "Tahoma";
//MainGrid.SelectedItemStyle.Font.Size = 10;
//MainGrid.SelectedItemStyle.Font.Bold = true;
//MainGrid.SelectedItemStyle.ForeColor = System.Drawing.Color.Blue;
MainGrid.SelectedItemStyle.BackColor = System.Drawing.Color.FromName("#DFE3E6");

//personalize AlternatingItemStyle
//交替项的样式
//MainGrid.AlternatingItemStyle.Font.Name = "Tahoma";
//MainGrid.AlternatingItemStyle.Font.Size = 10;
MainGrid.AlternatingItemStyle.ForeColor = System.Drawing.Color.Black;
MainGrid.AlternatingItemStyle.BackColor = System.Drawing.Color.FromName("#EFF3F4");

//personalize ItemStyle
//添充数据的样式
//MainGrid.ItemStyle.Font.Name = "Tahoma";
//MainGrid.ItemStyle.Font.Size =10;
MainGrid.ItemStyle.ForeColor = System.Drawing.Color.Black;
MainGrid.ItemStyle.BackColor = System.Drawing.Color.FromName("#FFFFFF");
MainGrid.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
MainGrid.ItemStyle.VerticalAlign = VerticalAlign.Middle;
MainGrid.ItemStyle.Height = Unit.Pixel(22); //personalize HeaderStyle
//标题标题部分的样式
//MainGrid.HeaderStyle.Font.Name = "Tahoma";
//MainGrid.HeaderStyle.Font.Size = 12;
//MainGrid.HeaderStyle.Font.Bold = true;
//MainGrid.HeaderStyle.ForeColor = System.Drawing.Color.DarkGray;
MainGrid.HeaderStyle.BackColor = System.Drawing.Color.FromName("#D6D7C7");
MainGrid.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
MainGrid.HeaderStyle.VerticalAlign = VerticalAlign.Middle;
MainGrid.HeaderStyle.Height = Unit.Pixel(24); //下边脚的显示样式
MainGrid.PagerStyle.Visible=false;
MainGrid.ShowFooter=false; //personalize PagerStyle
//表分页显示的样式
MainGrid.PagerStyle.Font.Name = "Tahoma";
MainGrid.PagerStyle.Font.Size = 8;
MainGrid.PagerStyle.BackColor = System.Drawing.Color.Gray; }

解决方案 »

  1.   

    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.LinkButton1.Click += new System.EventHandler(this.LinkButton1_Click);
    this.btnFirst.Click += new System.EventHandler(this.btnFirst_Click);
    this.btnPrev.Click += new System.EventHandler(this.btnPrev_Click);
    this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
    this.btnLast.Click += new System.EventHandler(this.btnLast_Click);
    this.btnGo.Click += new System.EventHandler(this.btnGo_Click);
    this.flash.Click += new System.EventHandler(this.flash_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion /// <summary>
    /// 绑定各行Item值
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Item_Created(Object sender, DataGridItemEventArgs e) 
    {
    if (e.Item.ItemIndex >= 0)
    {
    e.Item.Cells[0].Text = (MainGrid.PageSize * MainGrid.CurrentPageIndex + e.Item.ItemIndex + 1).ToString();
    }
    } /// <summary>
    /// 首页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnFirst_Click(object sender, System.EventArgs e)
    {
    PagerButtonClick(btnFirst.CommandArgument.ToString());
    } /// <summary>
    /// 下一页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnNext_Click(object sender, System.EventArgs e)
    {
    PagerButtonClick(btnNext.CommandArgument.ToString());
    } /// <summary>
    /// 末页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnLast_Click(object sender, System.EventArgs e)
    {
    PagerButtonClick(btnLast.CommandArgument.ToString());
    }

    /// <summary>
    /// 前一页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnPrev_Click(object sender, System.EventArgs e)
    {
    PagerButtonClick(btnPrev.CommandArgument.ToString());
    }
            
    /// <summary>
    /// 定位页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnGo_Click(object sender, System.EventArgs e)
    {
    PagerButtonClick(btnGo.CommandArgument.ToString());
    }
             /// <summary>
    /// 刷新页面
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void flash_Click(object sender, System.EventArgs e)
    {
    this.DataBind();
    this.DasGrid_DataBind();
    }
    /// <summary>
    /// 处理翻页的方法!
    /// </summary>
    /// <param name="arg"></param>
    private void PagerButtonClick(string arg)
    {
    btndo=true;
    switch(arg)
    {
    //下一页
    case("next"):
    if(MainGrid.CurrentPageIndex<(MainGrid.PageCount-1))
    {
    MainGrid.CurrentPageIndex++;

    Current.Text=Convert.ToString(MainGrid.CurrentPageIndex+1);
    if(MainGrid.CurrentPageIndex>=(MainGrid.PageCount-1))
    {
    btnNext.Enabled=false;
    btnLast.Enabled=false;
    }
    btnPrev.Enabled=true;
    btnFirst.Enabled=true;
    }
    break;
    //前一页
    case("prev"):
    if(MainGrid.CurrentPageIndex>0)
    {
    MainGrid.CurrentPageIndex--;
    Current.Text=Convert.ToString(MainGrid.CurrentPageIndex+1);
    if(MainGrid.CurrentPageIndex<=0)
    {
    btnPrev.Enabled=false;
    btnFirst.Enabled=false;
    }
    btnNext.Enabled=true;
    btnLast.Enabled=true;
    }
    break;
    //定位页
    case("appoint"):
    if(Current.Text.Length<=4)
    {
    if(Convert.ToInt32(Current.Text)>0 && Convert.ToInt32(Current.Text)<=MainGrid.PageCount)
    {
    MainGrid.CurrentPageIndex=System.Convert.ToInt32(Current.Text)-1;
    btnFirst.Enabled=true;
    btnPrev.Enabled=true;
    btnNext.Enabled=true;
    btnLast.Enabled=true;
    if(MainGrid.CurrentPageIndex==0)
    {
    btnPrev.Enabled=false;
    btnFirst.Enabled=false;
    }
    if(MainGrid.CurrentPageIndex==(MainGrid.PageCount-1))
    {
    btnNext.Enabled=false;
    btnLast.Enabled=false;
    } }
    }
    else
    {
    System.Console.Write("你的页面数选的太大了!");
    }
    break;
    //末页
    case("last"):
    MainGrid.CurrentPageIndex=(MainGrid.PageCount-1);
    Current.Text=Convert.ToString(MainGrid.CurrentPageIndex+1);
    btnNext.Enabled=false;
    btnLast.Enabled=false;
    btnFirst.Enabled=true;
    btnPrev.Enabled=true;
    break;
    //首页
    default:
    MainGrid.CurrentPageIndex=0;
    Current.Text=Convert.ToString(MainGrid.CurrentPageIndex+1);
    btnFirst.Enabled=false;
    btnPrev.Enabled=false;
    btnNext.Enabled=true;
    btnLast.Enabled=true;
    break;
    }
    //用于翻动页面时,存储定位的数据所在的页的行!
    // if(currentPage!=MainGrid.CurrentPageIndex)
    // {
    // MainGrid.SelectedIndex=-1;
    // }
    // else
    // {
    // MainGrid.SelectedIndex=currentRow;
    // }
    this.DataBind();
    this.DasGrid_DataBind();
    }
      

  2.   

    /// <summary>
    /// 数据源绑定
    /// </summary>
    public void DasGrid_DataBind()
    {
    if( this.iobject_DataSource != null)
    {
    BoundColumn col = new BoundColumn();
    col.HeaderText = "序号"; 
    MainGrid.Columns.Add(col);  DataTable ldt_Data = new DataTable();
    ldt_Data = (DataTable)iobject_DataSource;
    foreach(DataColumn datacol in ldt_Data.Columns)
    {
    col = new BoundColumn();
    col.HeaderText=datacol.ColumnName; 
    col.DataField=datacol.ColumnName;
    MainGrid.Columns.Add(col); 
    }
    MainGrid.DataSource=this.iobject_DataSource;
    MainGrid.DataBind(); 
    MainGrid.Columns[1].Visible = false;
    if(this.iobject_PID != null && btndo == false)
    {  
    MainGrid.SelectedIndex=0; while (this.iobject_PID != MainGrid.DataKeys[MainGrid.SelectedIndex].ToString() 
    && MainGrid.CurrentPageIndex <= (MainGrid.PageCount))
    {
    int i=0;
    while(this.iobject_PID != MainGrid.DataKeys[MainGrid.SelectedIndex].ToString() && i<(MainGrid.PageSize-1)) //i<3
    {
    i++;
    MainGrid.SelectedIndex++;
    } if(this.iobject_PID != MainGrid.DataKeys[MainGrid.SelectedIndex].ToString())
    {
    MainGrid.CurrentPageIndex++;
    MainGrid.DataBind();
    MainGrid.SelectedIndex=0;
    }
    } if(this.iobject_PID != MainGrid.DataKeys[MainGrid.SelectedIndex].ToString())
    {
    MainGrid.CurrentPageIndex=0;
    }
    else
    {
    currentRow=MainGrid.SelectedIndex;
    currentPage=MainGrid.CurrentPageIndex;
    MainGrid.SelectedIndex = -1;
    MainGrid.DataBind();

    }
    }
    }
    Anchor(MainGrid.CurrentPageIndex);
    showStats();
    btndo=false;

    }
            
    /// <summary>
    /// 显示当前所在的页面和总页数!
    /// </summary>
    void showStats()
    {
    CountPage.Text="页次:" + (MainGrid.CurrentPageIndex+1) +"/"+ MainGrid.PageCount;

    }
            
    /// <summary>
    /// 获取鼠标事件,同时找到鼠标所定位的行!
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void SelectRow(object sender,DataGridItemEventArgs e)
    {
    if(( e.Item.ItemType == ListItemType.Item) ||( e.Item.ItemType == ListItemType.AlternatingItem))

    //e.Item.Attributes.Add("onmousedown","this.style.backgroundColor='Silver'");
    //e.Item.Attributes.Add("onmouseup","this.style.backgroundColor='#ffffff'");
    e.Item.Attributes.Add("ID",""+MainGrid.DataKeys[e.Item.ItemIndex]+"");
    e.Item.Attributes["onclick"]="Click('"+MainGrid.DataKeys[e.Item.ItemIndex]+"');";
    e.Item.Attributes.Add("onmousedown","DataGridMouseDown('"+MainGrid.DataKeys[e.Item.ItemIndex]+"')");
    e.Item.Attributes.Add("onkeydown","element_onkeydown()");
    e.Item.Attributes.Add("onkeyup","element_onkeyup()");
    e.Item.Attributes["ondblclick"]="dblClick('"+MainGrid.DataKeys[e.Item.ItemIndex]+"')"; }
    }
            
    /// <summary>
    /// 找到鼠标所定位行的ID;
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void LinkButton1_Click(object sender, System.EventArgs e)
    {
    iobject_PID=this.toback.Value.ToString();
    DataBind();
    DasGrid_DataBind();
    }
    /// <summary>
    /// 定位后各个按纽的状态
    /// </summary>
    /// <param name="pageindex"></param>
    private void Anchor(int pageindex)
    {
    if(pageindex == 0)
    {
    this.btnFirst.Enabled = false;
    this.btnPrev.Enabled =false;
    if (MainGrid.PageCount == 1)
    {
    this.btnLast.Enabled = false;
    this.btnNext.Enabled = false;
    }
    else
    {
    this.btnLast.Enabled = true;
    this.btnNext.Enabled = true;
    }
    }
    else if(pageindex == MainGrid.PageCount-1)
    {
    if (pageindex == 0)
    {
    this.btnFirst.Enabled = false;
    this.btnPrev.Enabled = false;
    }
    else
    {
    this.btnFirst.Enabled = true;
    this.btnPrev.Enabled = true;
    }
    this.btnLast.Enabled = false;
    this.btnNext.Enabled = false;
    }
    else
    {
    this.btnFirst.Enabled = true;
    this.btnPrev.Enabled = true;
    this.btnLast.Enabled = true;
    this.btnNext.Enabled = true;
    }
    this.Current.Text = Convert.ToString(pageindex+1);
    }
    }
    }
      

  3.   

    try
       { 
          .....
       }
    catch 
       {    }在catch里判断,如果异常是那个INDEX错误就CurrentPageIndex=CurrentPageIndex-1试试吧
      

  4.   

    我想不是这个原因,可能是数据源的ViewState问题。我要在每次删除刷新时,将CurrentPageIndex=0;就可以了。但是效果一般!!