其实很简单,你肯定有个排序字段吧,如果向上,把当前列的排序号与上一行的排序号交换一下就ok了。更新一下库,然后从新绑定就行了。 if (e.CommandName=="lb_up") { DataTable dt=mb.GetGradeInfo(); for(int i=0;i<dt.Rows.Count;i+=1) { if (Int32.Parse(dt.Rows[i]["id"].ToString()) == Int32.Parse(DataGrid2.DataKeys[e.Item.ItemIndex].ToString())) { if (i!=0) { flag=1; n_id=Int32.Parse(dt.Rows[i-1]["id"].ToString()); n_order=Int32.Parse(dt.Rows[i-1]["g_order"].ToString()); c_order=Int32.Parse(dt.Rows[i]["g_order"].ToString()); } break; } } if (flag==1) { mb.UpdateGradeOrder(n_id,c_order); mb.UpdateGradeOrder(id,n_order); bindinglist(); return; } }
用存储过程比较好。 CREATE PROCEDURE sp_SetTopMarketTradeInfoOrder @InfoId int, --信息ID @HowSet nvarchar(100) , --设置方式 @language_ver nvarchar(50) AS declare @ChangeID int --待交换位置的ID declare @ChangeHotOrder int --待交换位置的序号 declare @CurrentInfoHotOrder int --当前的信息的热点序号 IF @HowSet='up' BEGIN --设置当前的信息的热点序号 SELECT @CurrentInfoHotOrder=TopOrder FROM t_MarketTradeInfo WHERE infoid=@InfoId and language_ver=@language_ver --选择待交换的信息 SELECT TOP 1 @ChangeID=infoID, @ChangeHotOrder=TopOrder FROM t_MarketTradeInfo WHERE (TopOrder < @CurrentInfoHotOrder) AND (isTop= 1) and language_ver=@language_ver ORDER BY TopOrder DESC --更新待交换的信息 UPDATE t_MarketTradeInfo SET TopOrder= @CurrentInfoHotOrder WHERE infoID =@ChangeID and language_ver=@language_ver --更新当前信息的序号 UPDATE t_MarketTradeInfo SET TopOrder= @ChangeHotOrder WHERE infoID =@infoID and language_ver=@language_ver END GO
for(int i = 0;i<dg.Columns.Count;i++)
{
string str = String.Empty;
str = dg.Items[1].Cells[i].Text;
dg.Items[1].Cells[i].Text = dg.Items[2].Cells[i].Text;
dg.Items[2].Cells[i].Text = str;
}
if (e.CommandName=="lb_up")
{
DataTable dt=mb.GetGradeInfo();
for(int i=0;i<dt.Rows.Count;i+=1)
{
if (Int32.Parse(dt.Rows[i]["id"].ToString()) == Int32.Parse(DataGrid2.DataKeys[e.Item.ItemIndex].ToString()))
{
if (i!=0)
{
flag=1;
n_id=Int32.Parse(dt.Rows[i-1]["id"].ToString());
n_order=Int32.Parse(dt.Rows[i-1]["g_order"].ToString());
c_order=Int32.Parse(dt.Rows[i]["g_order"].ToString());
}
break;
}
}
if (flag==1)
{
mb.UpdateGradeOrder(n_id,c_order);
mb.UpdateGradeOrder(id,n_order);
bindinglist();
return;
}
}
CREATE PROCEDURE sp_SetTopMarketTradeInfoOrder
@InfoId int, --信息ID
@HowSet nvarchar(100) , --设置方式
@language_ver nvarchar(50)
AS
declare @ChangeID int --待交换位置的ID
declare @ChangeHotOrder int --待交换位置的序号
declare @CurrentInfoHotOrder int --当前的信息的热点序号
IF @HowSet='up'
BEGIN
--设置当前的信息的热点序号
SELECT @CurrentInfoHotOrder=TopOrder FROM t_MarketTradeInfo WHERE infoid=@InfoId and language_ver=@language_ver
--选择待交换的信息
SELECT TOP 1 @ChangeID=infoID, @ChangeHotOrder=TopOrder FROM t_MarketTradeInfo
WHERE (TopOrder < @CurrentInfoHotOrder) AND (isTop= 1) and language_ver=@language_ver
ORDER BY TopOrder DESC
--更新待交换的信息
UPDATE t_MarketTradeInfo SET TopOrder= @CurrentInfoHotOrder WHERE infoID =@ChangeID and language_ver=@language_ver
--更新当前信息的序号
UPDATE t_MarketTradeInfo SET TopOrder= @ChangeHotOrder WHERE infoID =@infoID and language_ver=@language_ver END
GO