GridView 显示大量数据,页面执行非常慢,
不用存储过程,有什么解决的办法吗

解决方案 »

  1.   

    禁用viewstate
    差不多,还是很慢。
      

  2.   

    检查一下打开数据源花了多少时间,显示这些数据花了多长时间
    另外,注意一下 beginupdate,endupdate / disablecontrol,enablecontrol
      

  3.   

    分頁,這所以還慢,是因為你分頁沒有分好。
    你一次,只從數據庫中取某一頁頁的數據出來就會很快。
    如果你只是簡單設置一下屬性,還是一次性把所有數據能過 select 查出來,當然一樣慢。
      

  4.   

    wowangpeng() ( ) 信誉:100 分頁,這所以還慢,是因為你分頁沒有分好。
    你一次,只從數據庫中取某一頁頁的數據出來就會很快。
    如果你只是簡單設置一下屬性,還是一次性把所有數據能過 select 查出來,當然一樣慢。==============================在排除硬件问题(服务器端的CPU、内存、磁盘阵列、网络带宽等)的情况下,这是正解,还有啥可说呢
      

  5.   

    楼上几位说的,
    分页没分好?这个不存在啊 ,我几乎用GridView自带分页和自己定义分页,都用过了啊。DataSet也用了。一次从数据库中读出一页记录?这个怎么读呢,
      

  6.   

    很有可能是你网络带宽小,下载数据慢的原因,你用一个网络流量查看软件来看看,在GridView 显示大量数据,带宽用了多少.现在电脑的配置都很不错了,一般不会在执行上面慢.
      

  7.   

    select top 5 * from (select top 10 * from table order by id) a order by id desc
    每次只读5条,这是第二页,明白?
      

  8.   

    GridView  05里的控件有属性可以设置的
      

  9.   

    給你一個取某一頁的存儲過程吧!只取你想要某一頁!------------------------------------
    --用途:分页存储过程(对有主键的表效率极高)  
    --说明:
    ------------------------------------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.   

    看了半天才知道,LZ是误会了gridView的分页功能了.这是需要自己实现的.
      

  11.   

    每次只读一页数据,那分页怎么实现呢select  top  5  *  from  (select  top  10  *  from  table  order  by  id)  a  order  by  id  desc  
    这个分页没办法实现吧
      

  12.   

    上面的存储过程可以看懂,但是vs里面不知道怎么调用,呵呵 主要一直没用过,存储过程以前用过,但不是C#
      

  13.   

    分页的信息是存在viewstate里面的,取出了该页信息以后,还要去更改viewstate,才可以使得在界面上保持一致。这样说吧,你实际上取了10条内容,但是告诉系统,一共有100条内容,每页10条,显示第2页内容。
      

  14.   

    分页的信息是存在viewstate里面的,取出了该页信息以后,还要去更改viewstate,才可以使得在界面上保持一致。  
     
    这样说吧,你实际上取了10条内容,但是告诉系统,一共有100条内容,每页10条,显示第2页内容。 
    ==============================================================================
    这样sql语句实现不了吧。
      

  15.   

    分页的信息是存在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了。