CurrencyManager manager = (CurrencyManager)this.BindingContext[this.tDataGridView1.DataSource, this.tDataGridView1.DataMember];
int pos = manager.Position;//取鼠标所在行的位置
manager.AddNew();//新增一行
System.Collections.IList lis = manager.List;
DataView dv = (DataView)manager.List;//取出DataView
int positm = TConvert.ToInt32(dv[pos][1]);
for (int i = dv.Count - 2; i >= pos; i--)//要插入行后面的行ITM全部加1,dv[i][1]是行的ITM字段
{
if (i >= pos)
{
dv[i][1] = TConvert.ToInt32(dv[i][1]) + 1;
}
}
dv[dv.Count - 1][1] = positm;//新增行设国鼠标位置行
tDataGridView1.Sort(tDataGridView1.Columns["ITM"], ListSortDirection.Ascending);//按ITM排序场境:一个表单的表身,双主键,bil_no,itm,同一张表,bil_no相同,不用管,ITM作排序字段,表单加载时按ITM排序,客户可能做完一张表单,保存了,发现漏了一行,要在中间加入一行。
例 bil_no itm text.....
123 0 0
123 1 1
123 2 2
123 3 3
现在要在1前面插入一行
上面的代码可以实现
bil_no itm text....
123 0 0
123 1 4
123 2 1
123 3 2
123 4 3
新增情况下完全没问题,但是如果是之前保存过了,再修改的时候插入,就会产生主键冲突
比如123 1 4 这个数据是新增行,肯定就和数据库里123 1 1产生冲突了(ITM主键),
123 2 1这个数据是修改行,也和123 2 2这条数据产生冲突
想不到其他解决方案,求各路高手指点
int pos = manager.Position;//取鼠标所在行的位置
manager.AddNew();//新增一行
System.Collections.IList lis = manager.List;
DataView dv = (DataView)manager.List;//取出DataView
int positm = TConvert.ToInt32(dv[pos][1]);
for (int i = dv.Count - 2; i >= pos; i--)//要插入行后面的行ITM全部加1,dv[i][1]是行的ITM字段
{
if (i >= pos)
{
dv[i][1] = TConvert.ToInt32(dv[i][1]) + 1;
}
}
dv[dv.Count - 1][1] = positm;//新增行设国鼠标位置行
tDataGridView1.Sort(tDataGridView1.Columns["ITM"], ListSortDirection.Ascending);//按ITM排序场境:一个表单的表身,双主键,bil_no,itm,同一张表,bil_no相同,不用管,ITM作排序字段,表单加载时按ITM排序,客户可能做完一张表单,保存了,发现漏了一行,要在中间加入一行。
例 bil_no itm text.....
123 0 0
123 1 1
123 2 2
123 3 3
现在要在1前面插入一行
上面的代码可以实现
bil_no itm text....
123 0 0
123 1 4
123 2 1
123 3 2
123 4 3
新增情况下完全没问题,但是如果是之前保存过了,再修改的时候插入,就会产生主键冲突
比如123 1 4 这个数据是新增行,肯定就和数据库里123 1 1产生冲突了(ITM主键),
123 2 1这个数据是修改行,也和123 2 2这条数据产生冲突
想不到其他解决方案,求各路高手指点
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货