数据库中有tbltest(item,code,name,description),在datagrid中的显示如下1 aa aaname aatest
2 bb bbname bbtest
3 cc ccname cctest
4 dd ddname ddtest
5 ee eename eetest
现在要求在2和3之间插入一个值,排成
1 aa aaname aatest
2 bb bbname bbtest
3 kk kkname kktest //datagrid中插入的新行
4 cc ccname cctest //原来的item=3变成了item=4,依此类推
5 dd ddname ddtest
6 ee eename eetest
同样,在删除中间某行的情况下,也要能对item重新排序,不出现1,2,4,5的情况。同时,如果是在最后一行添加数据,必须是取max(item)+1请教各位达人,如何实现啊?保存数据的时候是通过传递xml字串到数据库,执行StoredProcedure操作来实现的。

解决方案 »

  1.   

    用DataSet结合DataView实现
    DataSet负责添加/插入等操作
    DataView负责排序绑定时用DataView进行绑定
      

  2.   

    可在每次绑定前对DataTable进行操作而不必对数据库进行物理操作,在DataTable中把item列去掉,而添加一个经过逻辑排序计算的“摸似序号”列。如下方法供参考:
    #region 为DataTable增加序号列(true:递增,false:递减),返回新的DataTable
    public DataTable AddNumber(DataTable table_object_name,string column_name,bool direction)
    {
    try
    {
    dt = table_object_name;
    //增加列
    dt.Columns.Add(column_name,System.Type.GetType("System.Int32"));
    if(direction == true)
    {
    //递增赋值
    for(int i=0;i<dt.Rows.Count;i++)
    {
    dt.Rows[i][column_name] = dt.Rows.Count-i;
    }
    return dt;
    }
    else
    {
    //递减赋值
    for(int i=dt.Rows.Count;i>0;i--)
    {
    dt.Rows[i-1][column_name] = i;
    }
    return dt;
    }
    }
    catch(Exception error)
    {
    throw error;
    }
    }
    #endregion