PDA

View Full Version : سوال: چستچو بر حسب چند CheckBox



hossein_va
چهارشنبه 12 فروردین 1394, 09:24 صبح
سلام

من میخوام بر حسب تعداد تیک های checkbox داده هامو فیلتر کنم مانند سایت زیر :
http://www.shixon.com/good/search/%D9%BE%DB%8C%D8%B1%D8%A7%D9%87%D9%86/?mc=1&g=2&sc=52&s=888

قسمت سایز .

با دستور زیر چک باکس هایی که کاربر انتخاب کرده را مشخص می کنم و کویری میگیرم اما مشکل اینجاست که برای فقط یه چک باکس کار میکنه و هنگامی که کاربر چند چک باکس را همزمان انتخاب میکنه دیگه فیلتر نمیشه (باید OR این چک باکس ها انجام بشه) .کد سمت سرور به شکل زیره


foreach (ListItem item in CheckBoxList1.Items)
{
if (item.Selected)
{
var query = myShop.SearchSize(item.Value);
DTProduct.DataSource = query.ToList();
}


}


که SearchSize رویه ذخیره شده است که به شکل زیر تعریف کردم


ALTER PROCEDURE [dbo].[SearchSize]
-- Add the parameters for the stored procedure here
@Amount1 nvarchar(20)

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;


-- Insert statements for procedure here
SELECT distinct id,Price,pic1,pic2,Name
FROM [Producs] INNER JOIN
(
select * from [VWSize] where (Amount=@Amount1)
) as table1
ON [Producs].id=table1.Producs_Id
END


اگه مثلا میشد که کاری کرد که متغییر var مقدار قبلیش را نگه میداشت و مقدار جدید را هم بهش اضافه میشد درست میشد ولی هر کاری کردم نشد؟؟

meisam12
چهارشنبه 12 فروردین 1394, 22:21 عصر
به این صورت بنویس

List<object> result = new List<object>();

foreach (ListItem item in CheckBoxList1.Items)
{
if (item.Selected)
{
var query = myShop.SearchSize(item.Value);
result.AddRange(query.ToList();
}
}

DTProduct.DataSource = result;




البته به جای object میتونی از نوع مورد نظرت استفاده کنی.

hossein_va
جمعه 14 فروردین 1394, 17:30 عصر
مرسی درست شد.با استفاده از کد زیر هم داده های تکراری را از تو لیست حذف کردم تا هر رکورد فقط یک بار نمایش داده بشه.گفتم بذارم شاید برای کسی لازم باشه


class Check : IEqualityComparer<SearchSize_Result>
{
public bool Equals(SearchSize_Result x, SearchSize_Result y)
{
if (x.id == y.id)
return true;
else
return false;
}


public int GetHashCode(SearchSize_Result obj)
{
return Convert.ToInt32(obj.id);
}
}


استفاده از این کلاس:

result = result.Distinct(new Check()).ToList();