datagrid绑定datareader,到底怎么翻页
以前也有人提过,最后的解决方法是自己写sql语句实现,但是我不要
datagrid绑定datareader,其自动生成的上页,下页就是不可选的,但是我用了一个button强制CurrentPage+1
连续两次后,两者都变的可以点击了,但是点了以后会出现当前页面必须小于pagecount大于0的错误
首先不要和我说要PageIndexChanged事件。我已经添加如下
this.DataGrid_TH.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid_TH_PageIndexChanged);
private void DataGrid_TH_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
Response.Write(e.NewPageIndex.ToString ());
SqlDataReader1=this.SqlCommand1.ExecuteReader();
DataGrid_TH.DataSource =SqlDataReader1;
DataGrid_TH.CurrentPageIndex=e.NewPageIndex;
Response.Write(DataGrid_TH.PageCount.ToString ());
//DataGrid_TH.DataBind();
}
也不要和我说和datagrid设置有关
看看AllowCustomPaging="True",PageSize="2"应该也够了
<asp:datagrid id="DataGrid_TH" runat="server" Width="100%" SelectedIndex="1" AllowPaging="True" PageSize="2" CellPadding="0" AllowCustomPaging="True" >
也不要和我说datareader是一次性的,每次要重新打开和绑定,我上面已经作了
(如果没有重新绑定就更没戏了)
也不要老说dataset,dataset没有问题,但是我打定主意就要用datareader
然后,我发现在绑定之前CurrentPageIndex是正常的,PageCount就是等于1
如果把上面的代码中//去掉,它就会提示说CurrentPage必须大于0小于等于PageCount,也就是说
唯一可能就是在绑定的时候,PageCount没有被改变,是因为它以为datareader只可以读一次所以就只读了一页的量吗??
简单的说,请你告诉我怎么样才能
问题点数:100、回复次数:5Top
1 楼seani(Jason)回复于 2002-09-17 09:10:35 得分 0
你搜索下翻页,很多以前很多这帖子
Top
2 楼spring_ok(广州泰能软件)回复于 2002-09-17 09:59:29 得分 100
我发明这个方法来实现你的功能,(不知是不是我第一个发明,:-)):
public void BindGrid(int PageIndex)
{
string strSql, strSql1;
strSql = "Select GroupID, GroupName, SortOrder, Remark From Groups";
strSql1 = "select count(*) from groups";
OleDbConnection connCip= new OleDbConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
OleDbCommand cmdCip = new OleDbCommand(strSql,connCip);
cmdCip.CommandType = CommandType.Text;
connCip.Open();
cmdCip.CommandText = strSql1;
int count = System.Convert.ToInt32(cmdCip.ExecuteScalar());
cmdCip.CommandText = strSql;
OleDbDataReader dr = cmdCip.ExecuteReader();
int i = 0;
if (i < PageIndex * DataGrid1.PageSize)
{
while (i < PageIndex * DataGrid1.PageSize)
{
dr.Read();
i++;
}
}
DataGrid1.VirtualItemCount = count;
DataGrid1.CurrentPageIndex = PageIndex;
DataGrid1.DataSource = dr;
DataGrid1.DataBind();
connCip.Close();
}
第一次打开页面时用 BindGrid(0) 来调用。翻页时用 BindGrid(e.NewPageIndex)来调用。Top
3 楼whatisit(itiswhat)回复于 2002-09-17 15:58:56 得分 0
谢谢楼上的,给分,另外,有个问题,为什么BindGrid(0)也要点两次,datagrid的翻页才能使用???Top
4 楼spring_ok(广州泰能软件)回复于 2002-09-17 23:48:16 得分 0
我的例子是不需要点击两次的。
你是放在Page_Load中吗?还应该判断只有在不是PostBack时才绑定。Top
5 楼whatisit(itiswhat)回复于 2002-09-18 15:12:21 得分 0
谢谢,搞定了Top




