在页面上有两个按钮,一个向上,一个向下,通过单击DataGrid中的某一行,然后按下向上的按钮,被选中的那一行就不停地向上移,如果按下向下的按钮就会不停地移动。

解决方案 »

  1.   

    下面是把第二行和第三行互换
    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;
    }
      

  2.   

    其实很简单,你肯定有个排序字段吧,如果向上,把当前列的排序号与上一行的排序号交换一下就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;
    }
    }
      

  3.   

    用存储过程比较好。
    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