这么菜还出来吓人真的是我的不对
关于DATAGRID分页的问题,,,因为数据表太大所以直接显示的话就会出现乱码,而选择了属性后AllowPaging后就有显示了,但只能显示第一页,我照猫画虎地添加了几条语句,我想肯定是不全不对的,就一个按钮和一个DATAGRID
大家能帮看看应该改哪里吗,
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CommonLibrary;
using System.Data.SqlClient;
namespace NetApp.Web.DigitSale
{
/// <summary>
/// WebForm6 的摘要说明。
/// </summary>
public class WebForm6 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private DataSet dataset;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
dataset = GetCheckCondition1();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private DataSet GetCheckCondition1()
{
return SqlHelper.ExecuteDataset(ConfigInfo.UniqueInstance.ConnectionString,
System.Data.CommandType.StoredProcedure, "web_checkcondition1 ");
}
private void Button1_Click(object sender, System.EventArgs e)
{
this.DataGrid1.DataSource=dataset.Tables[0].DefaultView;
this.DataGrid1.DataBind();
}
private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
{
}
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex = e.NewPageIndex;
DataGrid1.DataBind();
}
}
}
其实高手说最好是在存储过程里做分页的,但我太菜了,我也不会啊,
ALTER PROCEDURE dbo.web_checkcondition1
AS
select * from DigitCustSaleM
RETURN
这是这个页的存储过程,高手们能简单说下应该怎么样添加分页吗
还有我刚才看了一篇文章讲分页的,里面说要加上第一条记录数和最后一条记录数,可是我觉得复杂的查询后根本也不能知道到底有多少条啊,哈哈,这个问题是不是太菜了,请大家赐教,,,,
[解决办法]
初学不用想那么好的性能了
直接在属性里设置AllowPaging,pagesize就可实现分页
查询把所有的都查询出来
[解决办法]
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex = e.NewPageIndex;
dataset = GetCheckCondition1();
this.DataGrid1.DataSource=dataset.Tables[0].DefaultView;
this.DataGrid1.DataBind();
}
当然这是很不好的,只能正确运行而已
[解决办法]
先用自带的分页功能吧,存储过程的分页不是一两句能说清楚的
而且你对控件的使用应该还说不上熟悉
[解决办法]
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex = e.NewPageIndex;
this.DataGrid1.DataSource=dataset.Tables[0].DefaultView;
this.DataGrid1.DataBind();
}
}
}
[解决办法]
DataGrid控件已经过时, 建议使用GridView控件, 可以针对列排序,还有内置行编辑功能.
如果是winform, 则用DataGridView取代.
[解决办法]
为什么不用分页控件做啊?
aspnetpager
[解决办法]
数据库端加分页存储过程 想显示哪些行调用一下就行了。你可以写个sql语句试一下,看看,挺好用。
/************ Sql 上写一个分页存储过程。 几十万行数据很快的。
返回3个表
1、各个字段名
2、总共多少行,多少页,当前页
3、当前页数据
*/
CREATE PROCEDURE sp_mypager(@sqlstr nvarchar(4000),@Pagecount int, @pagesize int )
/*--分页方法:
-- j9988(j9988) --*/
-- @slqstr :查询字符串
-- @pagecount 第N 页
--@ pggesize 每页行数
/* --测试用
declare @sqlstr nvarchar(4000), --查询字符串
@pagecount int,--第N页
@pagesize int--每页行数
select @pagecount=2--第3页
,@pagesize=15--每页10条
,@sqlstr= 'select * from dbo.zy_kc_yu_852 '
*/
as
set nocount on
declare @P1 int,--P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select @rowcount as 总行数,ceiling(1.0*@rowcount/@pagesize) as 页数,@pagecount as 当前页
set @pagecount=(@pagecount-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@pagecount,@pagesize
exec sp_cursorclose @P1
GO
[解决办法]
http://weblogs.asp.net/scottgu/archive/2006/01/01/434314.aspx
这里有一些与分页有关的信息.
[解决办法]
mark
[解决办法]
DataGrid1.DataBind();
光写了分页设置,但是DataBind(),你最后没有绑定的数据源.
大量数据分页,可以找第三方分页函数.
[解决办法]
分页不外是两个操作:
1、select top 100000 id ...
2、select top 10 ... where xxx > id
[解决办法]
我有一个十分好的分页的方法,分页的关键就是查出第n到m的记录,在sql server中可以
SELECT TOP m-n+1 *
FROM publish
WHERE (id NOT IN (SELECT TOP n-1 id FROM publish))
用其他的数据库也有类似的功能
或者你直接用dataset做数据源。这样就可以在填充dataset的时候指定查询的数据段了。
[解决办法]
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex = e.NewPageIndex;
DataGrid1.DataBind();
this.Button1_Click(object source, ,new System.EventArgs());
}
楼主,我和你遇到的问题一样,后来改成这样就可以自动分页。
[解决办法]
VS2005设置可以直接分,2003好象不行!
[解决办法]
存储过程分页,高效