专家你好:
呵呵,有点那个,不管了说正事吧。
我用TableAdapter实现了查询添加修改删除功能以后每次增删改以后返回主界面,主界面里面有显示所有信息的DataGridView控件,因为修改数据就更新DataGridView控件,开始几百行数据还没什么,可是当数据达到1万行以上的时候遍历整个数据就慢的让人无法忍受了,又没有什么办法让DataGridView的数据更新的快一点?
刚才我发了一个帖子,有人说让我用线程先从数据取个几百行然后再慢慢读取,这样的方法可行吗?如果有好办法给我个例子好吗?拜托了
呵呵,有点那个,不管了说正事吧。
我用TableAdapter实现了查询添加修改删除功能以后每次增删改以后返回主界面,主界面里面有显示所有信息的DataGridView控件,因为修改数据就更新DataGridView控件,开始几百行数据还没什么,可是当数据达到1万行以上的时候遍历整个数据就慢的让人无法忍受了,又没有什么办法让DataGridView的数据更新的快一点?
刚才我发了一个帖子,有人说让我用线程先从数据取个几百行然后再慢慢读取,这样的方法可行吗?如果有好办法给我个例子好吗?拜托了
解决方案 »
- listview索引的问题
- 【请问高手】C#如何同步两个listview的滚动条呀,即拖动一个,另一个也跟着动?
- GirdView 并排 2並顯示數據的問題
- 比较字段
- 请教大家超市是怎么实现商品有效期管理的?欢迎参与讨论,经验一起分享
- 我动态添加到窗体的控件,如何删除掉?
- 请问在C#中怎样比较两个Timer实例的大小,比如判断一个Timer实例变量是否别另一个Timer实例变量大3秒)
- 超级怪问题
- 用System.Web.Mail发邮件如何设置邮件的标志的颜色(默认是白色),就是那个小旗的颜色.
- 用C#编译C++原代码
- [巨额悬赏].Net底层开发问题,调用DLL,IIS6高手入
- 寻求查找Method中的一些特定内容的方法
全部加载完毕再放进去。
如果LZ数据现多的话,别说显示慢,就你CUP也消耗不起的
Me.UserInfoViewTableAdapter.Fill(Me.TESTDataSet.UserInfoView)
Me.userview.DataSource = UserInfoViewBindingSource
ALTER Procedure [dbo].[PagingRecord]
@TableName varchar(50), --表名
@Fields varchar(5000) = '*', --字段名(全部字段为*)
@OrderField varchar(5000), --排序字段(必须!支持多字段)
@sqlWhere varchar(5000) = Null,--条件语句(不用加where)
@pageSize int, --每页多少条记录
@pageIndex int , --指定当前为第几页
@TotalPage int OUT --返回总页数
as
-- declare @pageSize int
-- select @pageSize=40
begin
print '@PageSize='
print @PageSize
Begin Tran --开始事务 Declare @sql nvarchar(4000);
Declare @totalRecord int; --计算总记录数
if (@SqlWhere='' or @sqlWhere=NULL)
set @sql = 'select @totalRecord = count(*) from ' + @TableName
else
set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数 --计算总页数
if (@SqlWhere='' or @sqlWhere=NULL)
set @sql = 'Select '+ @Fields +' FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName
else
set @sql = 'Select '+ @Fields +' FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere --处理页数超出范围情况
if @PageIndex<=0
Set @pageIndex = 1 select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)
print (@totalRecord)/@PageSize
print '@TotalPage='
print @TotalPage
if @pageIndex>@TotalPage
Set @pageIndex = @TotalPage --处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord int
print @pageIndex
set @StartRecord = (@pageIndex-1)*@PageSize + 1 set @EndRecord = @StartRecord + @pageSize - 1
--继续合成sql语句
set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord)
print @Sql
Exec(@Sql)
---------------------------------------------------
If @@Error <> 0
Begin
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
Return @totalRecord ---返回记录总数
End
end上面这个是我现在用的分页的存储过程,你只要传指定的参数就可以了,和GridView分页没什么区别
TotalPage是一个OutPut的参数,你在参数中用out参数接一下就行了,然后根据这个来统计总共多少条、多少页
其它的不用管了
不好意思,中间多了几个:
print (@totalRecord)/@PageSize
print '@TotalPage='
print @TotalPage
这是我用来测试的,你可以把它删掉,呵呵
社员表use TESTGO
if exists (select * from dbo.sysobjects where id = object_id(N'[M_USER]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [M_USER]
GO
CREATE TABLE [M_USER] (
[USERCD] [int] NOT NULL ,
[PASSWD] [varchar] (18) COLLATE Chinese_PRC_CI_AS NULL ,
[NM] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[KANA] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[AGE] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[SECTIONCD] [varchar] (3) COLLATE Chinese_PRC_CI_AS NULL ,
[TEL] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL ,
[EMAIL] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[REG_DT] [datetime] NULL CONSTRAINT [DF_reday] DEFAULT ('2008-08-08'),
[UP_DT] [datetime] NULL CONSTRAINT [DF_upday] DEFAULT (getdate()),
CONSTRAINT [PK_M_USER] PRIMARY KEY CLUSTERED
(
[USERCD]
) ON [PRIMARY]
) ON [PRIMARY]
GO部门表if exists (select * from dbo.sysobjects where id = object_id(N'[M_SECTION]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [M_SECTION]
GO
CREATE TABLE [M_SECTION] (
[SECTIONCD] [varchar] (3) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[SECTIONNM] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_M_SECTION] PRIMARY KEY CLUSTERED
(
[SECTIONCD]
) ON [PRIMARY]
) ON [PRIMARY]
GO
社员视图--初期化データー
CREATE VIEW dbo.UserInfoView
AS
SELECT M_USER.USERCD as ユーザーコード, M_USER.PASSWD as パスワード, M_USER.NM as 名称, M_USER.KANA as カナ, M_USER.AGE as 年齢,M_SECTION.SECTIONNM as 部署,M_USER.TEL as 電話番号, M_USER.EMAIL as Email, M_USER.REG_DT as 作成日, M_USER.UP_DT as 更新日
FROM M_USER INNER JOIN M_SECTION
ON M_USER.SECTIONCD = M_SECTION.SECTIONCD综合联合查询存储过程drop PROCEDURE UserSelectProcedure
--UserSelectProcedure
CREATE PROCEDURE UserSelectProcedure
@userid nvarchar(5),@usernm nvarchar(30),@userage nvarchar(3),@usersecid nvarchar(3),@usertel nvarchar(15),@useremail nvarchar(50),@userredt1 nvarchar(10),@userredt2 nvarchar(10),@userupdt1 nvarchar(10),@userupdt2 nvarchar(10)
AS
SELECT M_USER.USERCD as ユーザーコード, M_USER.PASSWD as パスワード, M_USER.NM as 名称, M_USER.KANA as カナ, M_USER.AGE as 年齢,M_SECTION.SECTIONNM as 部署,M_USER.TEL as 電話番号, M_USER.EMAIL as Email, M_USER.REG_DT as 作成日, M_USER.UP_DT as 更新日 FROM M_USER INNER JOIN M_SECTION ON M_USER.SECTIONCD = M_SECTION.SECTIONCD
WHERE ( (M_USER.USERCD like '%'+@userid+'' or M_USER.USERCD like '%'+@userid+'%')
and (M_USER.NM like '%'+@usernm+'%')
and (M_USER.AGE like '%'+@userage+'%' or AGE = ''+@userage+'')
and (M_USER.SECTIONCD=M_SECTION.SECTIONCD)
and (M_USER.SECTIONCD like '%'+@usersecid+'%')
and (M_USER.TEL like ''+@usertel+'%' or M_USER.TEL like '%'+@usertel+'%')
and (M_USER.EMAIL like '%'+@useremail+'%')
and ((M_USER.REG_DT between ''+@userredt1+'' and ''+@userredt2+'' or (M_USER.REG_DT >= ''+@userredt1+'' and M_USER.REG_DT like '%'+@userredt2+'%')) or (M_USER.REG_DT like '%'+@userredt1+'%' and M_USER.REG_DT like '%'+@userredt2+'%'))
and ((M_USER.UP_DT between ''+@userupdt1+'' and ''+@userupdt2+'' or (M_USER.UP_DT >=''+@userupdt1+'' and M_USER.REG_DT like '%'+@userupdt2+'%')) or (M_USER.UP_DT like '%'+@userupdt1+'%' and M_USER.UP_DT like '%'+@userupdt2+'%')))
order by M_USER.USERCD