参考书本上写了一个小程序,实现数据绑定。
用GridView控件来实现数据的显示,结果点击
“下一页”的时候出现error:
                      GridView“GridView1”激发了未处理的事件“PageIndexChanging
代码如下:
[code]
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            GridView1.PageIndex = e.NewSelectedIndex;
            BindGrid();//已经在上面实现
        }
[/code]何解???

解决方案 »

  1.   

    选中GridView,F4打开属性页,点击闪电图标,找到PageIndexChanging事件,双击空白,在生成的代码中写翻页处理代码,你看书上应该有啊
      

  2.   

    自定义分页using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
               }
        public void bind()
        {
            SqlConnection cn = new SqlConnection("server=.;database=pubs;uid=sa;pwd=sa");
            cn.Open();
            SqlDataAdapter da = new SqlDataAdapter("select * from authors", cn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            cn.Close();
            GridView1.DataSource = ds;
            GridView1.AllowPaging = true;
            GridView1.PageSize = 5;
            GridView1.DataBind();
            if (GridView1.PageIndex == 0)
            {
                Button1.Enabled = false;
                Button2.Enabled = false;
            }
            else
            {
                Button1.Enabled = true;
                Button2.Enabled = true;
            }
            if (GridView1.PageIndex == GridView1.PageCount - 1)
            {
                Button3.Enabled = false;
                Button4.Enabled = false;
            }
            else
            {
                Button3.Enabled = true;
                Button4.Enabled = true;
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
          
            GridView1.PageIndex = 0;
            bind();
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            GridView1.PageIndex = GridView1.PageIndex + 1;
            bind();
        }
        protected void Button4_Click(object sender, EventArgs e)
        {
            GridView1.PageIndex = GridView1.PageCount - 1;
            bind();
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            GridView1.PageIndex = GridView1.PageIndex - 1;
            bind();
        }
    }
    还是分页控件比较好AspnetPager1 存储过程
    CREATE   PROCEDURE Pagination
    @tblName varchar(255), -- 表名
    @strGetFields varchar(1000) = '*', -- 需要返回的列
    @fldName varchar(255)='', -- 排序的字段名
    @doType bit=0,--执行的类型1取记录的行数,否取记录集
    @PageSize int = 10, -- 页尺寸
    @PageIndex int = 1, -- 页码
    @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
    @strWhere varchar(1500) = ''-- 查询条件 (注意: 不要加 where)
    AS
    SET NOCOUNT ON
    declare @strSQL nvarchar(4000) -- 主语句
    declare @strTmp varchar(110) -- 临时变量
    declare @strOrder varchar(400) -- 排序类型
    if @doType=1--取记录的行数
    begin
    if @strWhere !=''
    set @strSQL = 'select count(*)  from ' + @tblName + ' where  '+@strWhere
    else
    set @strSQL ='select count(*)  from ' + @tblName + ''

    --EXEC SP_EXECUTESQL  @strSQL,N'@TotalRecordCount int output',@TotalRecordCount output
    end 
    else--取记录集
    begin
    if @OrderType != 0
    begin
    set @strTmp = "<(select min"
    set @strOrder = " order by " + @fldName +" desc"
    --如果@OrderType不是0,就执行降序,这句很重要!
    end
    else
    begin
    set @strTmp = ">(select max"
    set @strOrder = " order by " + @fldName +" asc"
    --如果@OrderType是0,就执行升序,这句很重要!
    end

    if @PageIndex = 1--如果当前页是第一页就执行以上代码,这样会加快执行速度
    begin
    if @strWhere != ''
    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from " + @tblName + " where " + @strWhere + " " + @strOrder
    else
    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from "+ @tblName + " "+ @strOrder
    --如果是第一页就执行以上代码,这样会加快执行速度
    end

    else
    begin
    --以下代码赋予了@strSQL以真正执行的SQL代码
    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ "  from  "
    + @tblName + "  where " + @fldName + "" + @strTmp + "("+ @fldName + ") from (select top " + str((@PageIndex-1)*@PageSize) + " "+ @fldName + " from " + @tblName + "" + @strOrder + ") as tblTmp)"+ @strOrder
    if @strWhere != ''
    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ "  from  "
    + @tblName + "  where  " + @fldName + " " + @strTmp + "("
    + @fldName + ") from (select top " + str((@PageIndex-1)*@PageSize) + " "
    + @fldName + " from " + @tblName + "  where  " + @strWhere + "  "
    + @strOrder + ") as tblTmp)  and  " + @strWhere + " " + @strOrder
    end
    end
    exec (@strSQL)GO
    DAL层代码
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using Marlboro.Model;namespace Marlboro.DAL
    {
       public class SQLProPage
        {
            public SQLProPage()
            {
            }        /// <summary>
            /// 取记录数
            /// </summary>
            /// <param name="model"></param>
            /// <returns></returns>
            public static int iRecordCount(page_model model)
            {
                string CommanText = "Pagination";
                SqlParameter[] para = new SqlParameter[] { 
                new SqlParameter("@tblName", model.TblName),
                    new SqlParameter("@strGetFields", model.StrGetFields),
                    new SqlParameter("@fldName", model.FldName),
                    new SqlParameter("@doType", 1),
                    new SqlParameter("@PageSize", 1),
                    new SqlParameter("@PageIndex", 1),
                    new SqlParameter("@OrderType", 0),
                    new SqlParameter("@strWhere", model.StrWhere)
                };
                return Marlboro.Common.SqlHelper.SqlHelper.ExecuteScalar(CommanText, para, CommandType.StoredProcedure);
            }
           /// <summary>
           /// 返回数据
           /// </summary>
           /// <param name="model"></param>
           /// <returns></returns>
            public static DataSet getDataSet(page_model model)
            {
                string CommanText = "Pagination";
                SqlParameter[] para = new SqlParameter[] { 
                new SqlParameter("@tblName", model.TblName),
                    new SqlParameter("@strGetFields", model.StrGetFields),
                    new SqlParameter("@fldName", model.FldName),
                    new SqlParameter("@doType", model.DoType),
                    new SqlParameter("@PageSize", model.PageSize),
                    new SqlParameter("@PageIndex", model.PageIndex),
                    new SqlParameter("@OrderType", model.OrderType),
                    new SqlParameter("@strWhere", model.StrWhere)
                };
                return Marlboro.Common.SqlHelper.SqlHelper.ReturnDataSet(CommanText, CommandType.StoredProcedure, para);
            }
        }
    }BLL
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using Marlboro.Model;
    using System.Data.SqlClient;
    namespace Marlboro.BLL
    {
        public class T_SQLProPage
        {
            /// <summary>
            /// 取记录数
            /// </summary>
            /// <param name="model"></param>
            /// <returns></returns>
            public static int iRecordCount(page_model model)
            {
                return Marlboro.DAL.SQLProPage.iRecordCount(model);
            }        /// <summary>
            /// 返回数据
            /// </summary>
            /// <param name="model"></param>
            /// <returns></returns>
            public static DataSet getDataSet(page_model model)
            {
                return Marlboro.DAL.SQLProPage.getDataSet(model);
            }    }
    }WEBusing System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using Marlboro.Model;public partial class Wage_search : System.Web.UI.Page
    {
        //声明实体
        Marlboro.Model.page_model model = new page_model();
        protected void Page_Load(object sender, EventArgs e)
        {
            //加载实体
            model.TblName = "V_WAGE";
            model.StrGetFields = "*";
            model.FldID = "STAFFID";
            model.StrWhere = "1=1";
            model.PageSize = Pager.PageSize;
            model.FldName = "STAFFID";//[MONTH]
            model.OrderType = 1;
            if (!IsPostBack)
            {
                BindData(model);
                //Gvbind();
            }
        }
        protected void btnsearch_Click(object sender, EventArgs e)
        {
            string SearchTime = Convert.ToDateTime(Calendar1.Text.Trim()).ToShortDateString().ToString();
            string Searchddl = Dr_Search.SelectedValue.ToString();
            string Searchtxt = txtsearch.Text.Trim();
            DataTable dt = new DataTable();
            dt = new Marlboro.BLL.T_wage().ReturnWageViewbyWhere(Searchddl, SearchTime, Searchtxt);
            if (dt.Rows.Count != 0)
            {
                Marlboro.Common.ControlHelper.ControlHelper.GridViewBind(this.GridView1, dt);
            }
            else
            {
                Marlboro.Common.WebHelper.MessageBox.Show("没数据");
                BindData(model);
            }    }
        void Gvbind()
        {
            Marlboro.Common.ControlHelper.ControlHelper.GridViewBind(GridView1, new Marlboro.BLL.T_wage().WageView());
        }    void BindData(page_model model)
        {
            //返回数
            Pager.RecordCount = Marlboro.BLL.T_SQLProPage.iRecordCount(model);
            if (Pager.CurrentPageIndex <= 0)
            {
                model.PageIndex = 1;
            }
            else
            {
                model.PageIndex = Pager.CurrentPageIndex;
            }
            //返回数据
            DataTable ds = Marlboro.BLL.T_SQLProPage.getDataSet(model).Tables[0];
            //绑定
            Marlboro.Common.ControlHelper.ControlHelper.GridViewBind(GridView1, ds);
        }    protected void Pager_PageChanged(object sender, EventArgs e)
        {
            BindData(model);
        }
    }
      

  3.   

    咦???代码没贴出来。。不好意思
    protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
            {
                GridView1.PageIndex = e.NewSelectedIndex;
                BindGrid();
            }是这样做的啊。IHander的意思应该是这样吧。。还是不行啊。
      

  4.   

    ok!!!
    好糗
    原来是我的函数名搞错了
    搞成SelectIndexChanging了
    丢人了。哈哈、。。