datagird分页

Datagrid的分页:不能与datareader搭配使用,要dataAdapter才行!

否则会有错误提示:

AllowPaging 设置为真并且选定的数据源不实现ICollection 时,AllowCustomPaging 必须为真,并且 ID DataGrid1 DataGrid 必须设置VirtualItemCount

 

解决方法:
1
、因为datagrid控件的数据源实现了ICollection接口的情况下启用分页功能,而datareader没有实现这个接口,所以不能实现。
2
AllowPaging设置为真并且选定的数据源不实现ICollection时,..”的意思是说你当起用分页的时候,datasource必须是 能实现icollection接口的对象。一般datatable,dataview都可以,但datareader不可以。
通过2的提示得到了解决,因为我将数据源设置为datareader了,改了以后就可以了!

知识点:
1
DataGrid1.PagerStyle.Mode=PagerMode.NextPrev;设置分页以上一个下一个的方式实现; DataGrid1.PagerStyle.Mode=PagerMode.NumericPages;设置分页以12等数字显示方式实现;
2
DataGrid1.CurrentPageIndex=e.NewPageIndex;pageindexchange方法然后将 newpageindex的值给currentpageindex;即实现分页功能,然后将数据源绑定到datagrid,即会显示分页后的结果。

              if(!Page.IsPostBack)

              {

                   SqlConnection myConnection = new SqlConnection(DataBaseDB.ConnectionString);

                   string sql ="select  new_id,new_title,new_time,new_flag from News where new_flag<>'3'  order by new_time desc";

                   SqlDataAdapter da = new SqlDataAdapter(sql,myConnection);

                   myConnection.Open();

                   DataSet ds = new DataSet();

                   da.Fill(ds);

                   latestnew.DataSource = ds;

                   latestnew.DataBind();

                   myConnection.Close();

//                 SqlCommand myCommand = new SqlCommand(sql,myConnection);

//                 myConnection.Open();

//                 SqlDataReader dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

//                 while(dr.Read())

//                 {

//                     latestnew.DataSource=dr;

//                     latestnew.DataBind();

//                 }

//                 dr.Close();

//               myConnection.Close();

              }

实现分页效果:

第一步:

private void InitializeComponent()

         {   

              this.latestnew.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.latestnew_PageIndexChanged);

//实现分页效果

              this.latestnew.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.latestnew_ItemCommand);

 //实现命令(是否确认删除)

              this.latestnew.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.latestnew_ItemDataBound);

//实现绑定(更新数据)

              this.Load += new System.EventHandler(this.Page_Load);

         }

第二步:

         private void Page_Load(object sender, System.EventArgs e)

         {

              // 在此处放置用户代码以初始化页面

              if(!Page.IsPostBack)

              {

              BindData();

              }

         }

第三步:

         private void latestnew_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)

         {

              //latestnew.CurrentPageIndex = e.NewPageIndex;

              latestnew.EditItemIndex = -1;

              latestnew.CurrentPageIndex = e.NewPageIndex;

              BindData();

         }

第四步:

         private void BindData()

         {

              SqlConnection myConnection = new SqlConnection(DataBaseDB.ConnectionString);

              string sql ="select  new_id,new_title,new_time,new_flag from News where new_flag<>'3'  order by new_time desc";

 

              SqlDataAdapter da = new SqlDataAdapter(sql,myConnection);

              myConnection.Open();

              DataSet ds = new DataSet();

              da.Fill(ds);

              latestnew.DataSource = ds.Tables[0].DefaultView;

              latestnew.DataBind();

              myConnection.Close();

 

         }

第五步:删除与更新

         private void latestnew_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

         {

              ImageButton deleteBtn=(ImageButton)e.Item.FindControl("deleteBtn");

              if(deleteBtn!=null)

              {

                   deleteBtn.Attributes.Add("onclick","return confirm('你确定要删除此篇文章吗?删除后此文章将移入回收站。');");

              }

         }

 

         private void latestnew_ItemCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)

         {

              if(e.CommandName.ToLower()=="delete")

              {

                   SqlConnection myConnection = new SqlConnection(DataBaseDB.ConnectionString);

                   string cmdText="update news set new_flag='3',list_id='0' where new_id="+this.latestnew.DataKeys[e.Item.ItemIndex].ToString()+"";

                   SqlCommand myCommand = new SqlCommand(cmdText,myConnection);

                   myConnection.Open();

                   myCommand.ExecuteReader(CommandBehavior.CloseConnection);

                   BindData();

              }

         }

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值