再问datagrid中行上下移动的问题

yzg614 2005-12-10 01:11:42
我想实现如下:
序号 字段一 字段二 编辑
1 AA XXXXX 向上移动 向下移动
2 BB YYYYY 向上移动 向下移动
3 CC NNNNN 向上移动 向下移动
4 DD ZZZZZ 向上移动 向下移动
目前的思路是
数据库表中增加一个排序字段,点击按钮的时候更改排序字段的值
对DataGrid绑定数据的时候按照排序字段获取数据, 问题是.如果datagrid分页的话 ,上移时 我当前的页的第一条记录如何和前一页中的最后一条记录交换数据?
...全文
152 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzg614 2005-12-12
  • 打赏
  • 举报
回复
非常感谢 singlepine(小山)的解答
singlepine 2005-12-10
  • 打赏
  • 举报
回复
存储过程根据实际需要做下修改就可以了
singlepine 2005-12-10
  • 打赏
  • 举报
回复
请仔细研究下面这个存储过程,主要原理就是抓取当前记录的orderno,然后上移-1,下移+1,这样在数据库中已经把orderno字段给更新了,然后又是重新绑定,重新绑定的时候是按orderno来排序的,自然分页的顺序也就跟着变了,cs代码其实很简单就是单纯调用存储过程,所有逻辑已经在存储过程中处理过了。但是一定要记得在绑定的sql语句要有orderno的排序

--测试表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Job_Person]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Job_Person]
GO

CREATE TABLE [dbo].[Job_Person] (
[Job_PersonID] [int] NOT NULL ,
[PersonID] [int] NOT NULL ,
[OrderNo] [int] NULL ,
[CreateOn] [datetime] NULL ,
[CreateByID] [int] NULL ,
[ModifyOn] [datetime] NULL ,
[ModifyByID] [int] NULL
) ON [PRIMARY]
GO

--测试存储过程
CREATE PROCEDURE tp_MoveOrder_Entity_Job
(
@Job_EntityID int,--表主键id
@Direction INT, -- @Direction : move up : -1 , move down : 1
@UserID int --修改人id
)
AS
declare @EntityID int
declare @OrderNo INT
declare @MaxOrderNo Int

declare @OrderNo_1 int
declare @OrderNo_2 int

declare @Job_EntityID_1 int
declare @Job_EntityID_2 int

BEGIN

SET NOCOUNT ON

BEGIN

Select @OrderNo = OrderNo, @EntityID = PersonID From Job_Person
Where Job_PersonID = @Job_EntityID

select @MaxOrderNo = max(OrderNo) From Job_Person
WHERE PersonID = @EntityID

SET @OrderNo_1 = @OrderNo
SET @OrderNo_2 = @OrderNo + @Direction

if (@MaxOrderNo = 1 )
return 0 --只有一条记录则返回

if ((@OrderNo = 1 ) AND (@Direction = -1))--设置move up orderno
BEGIN

SET @OrderNo_1 = 1
SET @OrderNo_2 = @MaxOrderNo
END

if ((@OrderNo = @MaxOrderNo ) AND (@Direction = 1))--设置move down orderno
BEGIN

SET @OrderNo_1 = 1
SET @OrderNo_2 = @MaxOrderNo
END

--根据orderno取得不同的move资料
select @Job_EntityID_1= Job_PersonID from Job_Person
where PersonID = @EntityID and OrderNo = @OrderNo_2

select @Job_EntityID_2= Job_PersonID from Job_Person
where PersonID = @EntityID and OrderNo = @OrderNo_1
--update orderno
update Job_Person
set orderno = @OrderNo_1,
ModifyOn = getdate(),
ModifyByID = @UserID
where Job_PersonID = @Job_EntityID_1
IF @@ERROR <> 0
RETURN 1
--update orderno
update Job_Person
set orderno = @OrderNo_2,
ModifyOn = getdate(),
ModifyByID = @UserID
where Job_PersonID = @Job_EntityID_2
IF @@ERROR <> 0
RETURN 1
END

RETURN 0

END
GO

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧