PDA

View Full Version : حذف دسته جمعی رکوردها توسط GridView



nazaninam
سه شنبه 26 تیر 1386, 22:37 عصر
سلام
یک GridView دارم که در کنار هر سطر یک CheckBox قرار داره.
کاربر میتونه یک یا چند سطر را انتخاب و دکمه حذف یا هر چیز دیگه ای را بفشاره تا عملی روی رکورد های مورد نظر انجام شه !
مشکل اینجاست که ما معمولا داخل یک حلقه foreach تمامی سطر ها رو میخونم ، سپس CheckBox را پیدا میکنیم ! میبینیم چک خورده یا نه ، حالا اگه چک خورده بود باید به ازای هر سطر یه عمل Delete یا Update یا هر عمل دیگه ای انجام بشه !
این کار باعث میشه چندین بار عمل Query به دیتابیس تحمیل شه و اگه رکورد ها خیلی زیاد باشه باعث کاهش کارایی سایت خواهد شد.

چیزی که به ذهنم رسید این بود که آی دی همه رکورد ها رو یک با یک کاراکتر ',' جدا کنیم و به یک Sp پاس بدیم ! اونجا همرو باهم حذف کنیم!
ولی نمی دونم چطور اونجا از هم Split کنم.

اگه میشه راه کار های خوبتون رو ارائه کنید

babi_wd
سه شنبه 26 تیر 1386, 23:46 عصر
CREATE FUNCTION [dbo].[uf_INCondition]
(@strIN nvarchar(1000))
RETURNS @TB TABLE
(
Field1 nvarchar(50) collate Arabic_CI_AS
)
AS
BEGIN
DECLARE @str nvarchar(1000)
DECLARE @tmpTB TABLE (Field2 nvarchar(50) )
DECLARE @StartPos int
DECLARE @EndPos int
DECLARE @Def int
SET @StartPos=1
SET @EndPos=1
SET @str=@strIN
WHILE @EndPos <= DATALENGTH(@strIN)
BEGIN
IF SUBSTRING(@strIN,@EndPos,1)=','
BEGIN
SET @Def=@EndPos-@StartPos
INSERT INTO @tmpTB VALUES( SUBSTRING(@str,@StartPos,@Def) )
SET @EndPos=@EndPos+1
SET @StartPos=@EndPos
END
ELSE
SET @EndPos=@EndPos+1
END
SET @Def=@EndPos-@StartPos
INSERT INTO @tmpTB VALUES( SUBSTRING(@str,@StartPos,@Def) )
INSERT @TB
SELECT Field2
FROM @tmpTB
RETURN
END

با استفاده از این تابع و تنظیم شرط به این صورت

where
( customers.id IN (select * from uf_INCondition (@customer_id)))

nazaninam
چهارشنبه 27 تیر 1386, 10:09 صبح
کسی راهی غیر از این پیشنهاد نمی کنه؟

Behrouz_Rad
چهارشنبه 27 تیر 1386, 10:17 صبح
babi_wd بهترین روش رو ارائه داد.
بنده نیز از همین روش برای پارامتریک کردن کلاس IN استفاده میکنم.

موفق باشید.

Nightbat
پنج شنبه 28 تیر 1386, 13:24 عصر
برای Delete کردن فقط کافیه ID هایی که به ',' از هم جدا شدن رو به sp بفرستی، بعد هم با کد زیر همه چیز حله:


Set @Sqltxt = 'Delete From [tblName] Where Id in (' + @parameter + ' )'
البته که باید کد را execute کرد.