前端獲取選擇了哪些數據行對應的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後面都有逗號,因此這兩句就不用額外加了。