PDA

View Full Version : سوال: فیلتر کردن در دیتاگرید بر اساس گرینه های انتخاب شده و نشده



aliramazani
چهارشنبه 01 مرداد 1393, 13:58 عصر
در تصویر ضمیمه نگاه کنید من یک دیتاگرید ویو دارم که بر اساس گزینه هایی که فلش زده شده باید اطلاعات جدول را فیلتر کنند. طبق دستور زیر من میتونم به جدول بگم فیلتر کن جایی که فلان ستون برابر با فلان تک باکس باشه و همینطور برای گزینه های بعدی با قرار دادن چندتا where و And

حالا سوال اینجاست توی این کد من باید همه گزینه ها انتخاب بشن. چطور میشه کاری کرد که مثلا اگر کاربر نخواست روی همه گزینه ها فیلتر کنه و مثلا دو مورد را انتخاب کنه برای مورد سوم را اگر خالی گذاشت یا انتخاب نکرد برنامه اینو کل فیلدهای موجود را به جاش در نظر بگیره.

مثلا در برنامه من کاربر اگر عنوان را انتخاب کرد و شماره سلول را زد دقیقا برنامه براش اطلاعات جدول را باز میکنه جایی که عنوان برابر با ستون عنوان و سلول برابر با شماره انتخاب شده است. حالا می خوام اگر عنوان را انتخاب کرد و سلول را خالی گذاشت خالی بودن را به معنای کل شماره های موجود در نظر بگیره.



var DB = new LINQDataContext();


var Query = from t in DB.cells
where t.various == onv && t.cell1 == celn
select t;
dgv.DataSource = Query;

hadi vafaii
چهارشنبه 01 مرداد 1393, 14:06 عصر
با ایف و الس نمیشه؟:متفکر:

aliramazani
چهارشنبه 01 مرداد 1393, 14:10 عصر
من حدود 7 یا 8 فیلد دارم که باید بر اساس اونا فیلتر انجام بشه. با ایف و الس حدو 64 حالت پیش میاد. آیا منطقیه من 64 تا اف بزارم؟؟؟؟

Mahmoud.Afrad
چهارشنبه 01 مرداد 1393, 14:42 عصر
بایست به ازای هر فیلتر ممکن ، توسط یک if نتیجه مرحله قبل رو فیلتر کنی و توی همون متغیر قرار بدی.

var DB = new LINQDataContext();

var query = DB.cells.AsQueryable();

if (...) // اگر از کمبو عنوان انتخاب شد
{
query = from item in query
where item.various == onv
select item;
}

if(...) // اگر از کمبو سلول انتخاب شد
{
query = from item in query
where item.cell1 == celn
select item;
}

dgv.DataSource = query; //query.tolist();

آدرس زیر یک مثال قرار دادم.
http://barnamenevis.org/showthread.php?64210&p=1565318&viewfull=1#post1565318

aliramazani
چهارشنبه 01 مرداد 1393, 15:40 عصر
این روش امکانپذیر هست فقط برای جایی که تو تا تکس باکس داریم نه جایی که چندین تکس باکس و حالت انتخاب هست.
شما تصور کنید از بین هشت گزینه کار بر فقط 2 تا را بخواد فیلتر کنه و بقیه را نخواد میدونید چندتا ایف میشه؟؟؟؟؟

اصلا منطقی نیست این روش

Mahmoud.Afrad
چهارشنبه 01 مرداد 1393, 17:38 عصر
این روش امکانپذیر هست فقط برای جایی که تو تا تکس باکس داریم نه جایی که چندین تکس باکس و حالت انتخاب هست.
شما تصور کنید از بین هشت گزینه کار بر فقط 2 تا را بخواد فیلتر کنه و بقیه را نخواد میدونید چندتا ایف میشه؟؟؟؟؟

اصلا منطقی نیست این روش

چند تا میشه؟

aliramazani
چهارشنبه 01 مرداد 1393, 17:53 عصر
حدود 60 تا

Mahmoud.Afrad
چهارشنبه 01 مرداد 1393, 18:16 عصر
این یعنی اینکه نه اون لینکی که قرار دادم رو دیدی نه کدی که همینجا گذاشتم. شما به ازای هر تکست باکس یک if میزاری و خبری از else نیست (مگر جایی که رادیوباتن داشته باشی). پس برای 8 تکست باکس 8 تا if نیاز داری.

اگر نتونستی کد خودت رو بزار تا اصلاح بشه.

hadi vafaii
چهارشنبه 01 مرداد 1393, 19:52 عصر
خب چرا از switch استفاده نمی کنی:لبخندساده:

silver189
شنبه 04 مرداد 1393, 08:49 صبح
من برای فیلتر کردن دیتاگریدویو از این روش استفاده می کنم . شاید به درد شما هم بخوره


try
{
((DataTable)dataGridView1.DataSource).DefaultView. RowFilter = string.Format("UserName like '%{0}%' or Port like '%{0}%'", txtSearch.Text.Trim().Replace("'", "''"));
}
catch (Exception) { }