GridView 显示大量数据,页面执行非常慢(急) GridView 显示大量数据,页面执行非常慢,不用存储过程,有什么解决的办法吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 禁用viewstate差不多,还是很慢。 检查一下打开数据源花了多少时间,显示这些数据花了多长时间另外,注意一下 beginupdate,endupdate / disablecontrol,enablecontrol 分頁,這所以還慢,是因為你分頁沒有分好。你一次,只從數據庫中取某一頁頁的數據出來就會很快。如果你只是簡單設置一下屬性,還是一次性把所有數據能過 select 查出來,當然一樣慢。 wowangpeng() ( ) 信誉:100 分頁,這所以還慢,是因為你分頁沒有分好。你一次,只從數據庫中取某一頁頁的數據出來就會很快。如果你只是簡單設置一下屬性,還是一次性把所有數據能過 select 查出來,當然一樣慢。==============================在排除硬件问题(服务器端的CPU、内存、磁盘阵列、网络带宽等)的情况下,这是正解,还有啥可说呢 楼上几位说的,分页没分好?这个不存在啊 ,我几乎用GridView自带分页和自己定义分页,都用过了啊。DataSet也用了。一次从数据库中读出一页记录?这个怎么读呢, 很有可能是你网络带宽小,下载数据慢的原因,你用一个网络流量查看软件来看看,在GridView 显示大量数据,带宽用了多少.现在电脑的配置都很不错了,一般不会在执行上面慢. select top 5 * from (select top 10 * from table order by id) a order by id desc每次只读5条,这是第二页,明白? GridView 05里的控件有属性可以设置的 給你一個取某一頁的存儲過程吧!只取你想要某一頁!--------------------------------------用途:分页存储过程(对有主键的表效率极高) --说明:------------------------------------CREATE PROCEDURE UP_GetRecordByPage @tblName varchar(255), -- 表名 @fldName varchar(255), -- 主键字段名 @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @IsReCount bit = 0, -- 返回记录总数, 非 0 值则返回 @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 @strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)ASdeclare @strSQL varchar(6000) -- 主语句declare @strTmp varchar(100) -- 临时变量declare @strOrder varchar(400) -- 排序类型if @OrderType != 0begin set @strTmp = '<(select min' set @strOrder = ' order by [' + @fldName +'] desc'endelsebegin set @strTmp = '>(select max' set @strOrder = ' order by [' + @fldName +'] asc'endset @strSQL = 'select top ' + str(@PageSize) + ' * from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' + @strOrderif @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) + ' * from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderif @PageIndex = 1begin set @strTmp ='' if @strWhere != '' set @strTmp = ' where ' + @strWhere set @strSQL = 'select top ' + str(@PageSize) + ' * from [' + @tblName + ']' + @strTmp + ' ' + @strOrderendif @IsReCount != 0 set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhereexec (@strSQL)GO 看了半天才知道,LZ是误会了gridView的分页功能了.这是需要自己实现的. 每次只读一页数据,那分页怎么实现呢select top 5 * from (select top 10 * from table order by id) a order by id desc 这个分页没办法实现吧 上面的存储过程可以看懂,但是vs里面不知道怎么调用,呵呵 主要一直没用过,存储过程以前用过,但不是C# 分页的信息是存在viewstate里面的,取出了该页信息以后,还要去更改viewstate,才可以使得在界面上保持一致。这样说吧,你实际上取了10条内容,但是告诉系统,一共有100条内容,每页10条,显示第2页内容。 分页的信息是存在viewstate里面的,取出了该页信息以后,还要去更改viewstate,才可以使得在界面上保持一致。 这样说吧,你实际上取了10条内容,但是告诉系统,一共有100条内容,每页10条,显示第2页内容。 ==============================================================================这样sql语句实现不了吧。 分页的信息是存在viewstate里面的,取出了该页信息以后,还要去更改viewstate,才可以使得在界面上保持一致。 这样说吧,你实际上取了10条内容,但是告诉系统,一共有100条内容,每页10条,显示第2页内容。 ==============================================================================这样sql语句实现不了吧。==============================================================================实际上取10条内容:这个使用Sql语句来取,使用存储过程,同时可以用out参数返回总共数据有多少条。告诉系统,一共有100条内容,每页10条,显示第2页内容:这个是通过修改viewstate中的数据来达到“欺骗”系统的目的。DataGridView之所以能够分页,因为分页数据放到了viewstate中,将总共的数据量以及其他一些参数修改,可以达到界面上的统一——反正在第2页看不到第3页的内容吧?其实还有个简单的:使用Sql语句,得到总共数据,用数据建立临时表,把不需要的部分全部放空。比如,一共100条,每页10条,显示第2页。这时候,临时表中1-10条数据直接填充为空,11-20条数据填充为实际数据,21-100条数据填充为空数据。这样,DataGridView显示起来,就跟拿全部数据显示没两样,就不用去搞stateview了。 C#数据库问题 关于一个网页加载的进度条问题 c#类似QQ登录器的问题 鼠标拖动改变listview的columnHeader的width时怎么触发事件? 求助!c# winform中的Datagrid应用问题? 如何在web程序中集成windows程序 如何删除同文件名且后缀不同的文件 在C#中怎样传递链表进入dll中的函数中? 如何在窗体设计时改变窗口类名 RichTextBox 功能探讨 线程中改变窗体控件!!
差不多,还是很慢。
另外,注意一下 beginupdate,endupdate / disablecontrol,enablecontrol
你一次,只從數據庫中取某一頁頁的數據出來就會很快。
如果你只是簡單設置一下屬性,還是一次性把所有數據能過 select 查出來,當然一樣慢。
你一次,只從數據庫中取某一頁頁的數據出來就會很快。
如果你只是簡單設置一下屬性,還是一次性把所有數據能過 select 查出來,當然一樣慢。==============================在排除硬件问题(服务器端的CPU、内存、磁盘阵列、网络带宽等)的情况下,这是正解,还有啥可说呢
分页没分好?这个不存在啊 ,我几乎用GridView自带分页和自己定义分页,都用过了啊。DataSet也用了。一次从数据库中读出一页记录?这个怎么读呢,
每次只读5条,这是第二页,明白?
--用途:分页存储过程(对有主键的表效率极高)
--说明:
------------------------------------CREATE PROCEDURE UP_GetRecordByPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 主键字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsReCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
ASdeclare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(100) -- 临时变量
declare @strOrder varchar(400) -- 排序类型if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
endset @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrderif @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderif @PageIndex = 1
begin
set @strTmp =''
if @strWhere != ''
set @strTmp = ' where ' + @strWhere set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
endif @IsReCount != 0
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhereexec (@strSQL)GO
这个分页没办法实现吧
这样说吧,你实际上取了10条内容,但是告诉系统,一共有100条内容,每页10条,显示第2页内容。
==============================================================================
这样sql语句实现不了吧。
这样说吧,你实际上取了10条内容,但是告诉系统,一共有100条内容,每页10条,显示第2页内容。
==============================================================================
这样sql语句实现不了吧。
==============================================================================实际上取10条内容:这个使用Sql语句来取,使用存储过程,同时可以用out参数返回总共数据有多少条。
告诉系统,一共有100条内容,每页10条,显示第2页内容:这个是通过修改viewstate中的数据来达到“欺骗”系统的目的。DataGridView之所以能够分页,因为分页数据放到了viewstate中,将总共的数据量以及其他一些参数修改,可以达到界面上的统一——反正在第2页看不到第3页的内容吧?其实还有个简单的:使用Sql语句,得到总共数据,用数据建立临时表,把不需要的部分全部放空。比如,一共100条,每页10条,显示第2页。这时候,临时表中1-10条数据直接填充为空,11-20条数据填充为实际数据,21-100条数据填充为空数据。这样,DataGridView显示起来,就跟拿全部数据显示没两样,就不用去搞stateview了。