前端获取选择了哪些数据行对应的id值,DEV表格控件选择时直接按住ctrl或shift键之后即可多选,当然需要设置一下表格允许多选奥。
/// <summary>
/// 生成选中行id数组
/// 2019-6-6
/// </summary>
private string[] GetSelectRowsIdArray(DevExpress.XtraGrid.Views.Grid.GridView gv, string idCoumnName)
{
List<int> selectedRows = gv.GetSelectedRows().Where((t) => t >= 0).ToList();
string[] idArray = { "", selectedRows.Count.ToString()};
foreach (int i in selectedRows)
{
string idStr = gv.GetRowCellValue(i, idCoumnName).ToString();
idArray[0] += idStr + ",";
}
// idArray[0] = idArray[0].Substring(0, idArray[0].Length - 1);
return idArray;
}
这里获取选中行id值,并组成“1,2,3,5,”这样的字符串,一开始想着这样先把最后的逗号去掉传到存储过程直接就能一次处理多条记录,但是实践了一下这样传过去的字符串是不能直接在sql里用in()这种方式使用的。
因此上面的代码里把最后取消最后一个逗号的那句注释掉,后面会用到的。
存储过程:
ALTER PROCEDURE [dbo].[BasisPriceNew_DepositPayConfirm]
@ID varchar(300)
AS
Begin Tran;
Declare @errors int --错误数
Set @errors =0;
DECLARE @PointerPrev int
DECLARE @PointerCurr int
DECLARE @TId int
Set @PointerPrev=1
while (@PointerPrev < LEN(@ID))
Begin
Set @PointerCurr=CharIndex(',',@ID,@PointerPrev)
if(@PointerCurr>0)
Begin
set @TId=cast(SUBSTRING(@ID,@PointerPrev,@PointerCurr-@PointerPrev) as int)
UPDATE BasisPriceNew SET ifDelete=1 where ID=@TID
SET @PointerPrev = @PointerCurr+1
End
else
Break
End
--删除最后一个,因为最后一个后面没有逗号,所以在循环中跳出,需另外再删除
--set @TId=cast(SUBSTRING(@ID,@PointerPrev,LEN(@ID)-@PointerPrev+1) as int)
--Delete from News where ID=@TID
if @errors<>0 --判断修改数据有没有出错
begin --如果出错
rollback tran -- 回滚事务
Select 'ERROR',0,'CONFIRMDEPOSIT-PRICING-ERROR', '批量删除失败';
end
else --没有出错
begin
commit tran --提交事务
Select 'OK',0,'CONFIRMDEPOSIT-PRICING-OK', '批量删除成功';
end
中间有两句是原来的程序,因为前面字符串传来的每个id后面都有逗号,因此这两句就不用额外加了。