نقل قول: فیلتر روی گرید با linq
سلام
ابتدا کامپوننت BindingSource فرم اصلی رو public کن تا تو فرم فیلتر بتونی بهش دست پیدا کنی. بعد با استفاده از خاصیت Filter این کامپوننت رکوردها رو فیلتر کن:
http://msdn.microsoft.com/en-us/libr...ce.filter.aspx
با متد RemoveFilter فیلتر رو پاک کن.
زمانی که متد هایی برای انجام یک کار وجود دارد نباید راه ساختگی را در پیش بگیریم.
نقل قول: فیلتر روی گرید با linq
فرض می کنم شما از Linq To EF برای گرفتن اطلاعات از DataBase استفاده میکنید. همانطور که می دونید کوئری های Linq قابلیت deferred execution داره بنابراین در لحظه تعریف کوئری اجرا نمی شه و ما می تونیم شرط های بیشتر رو برای فیلتر کردن به کوئری اضافه کنید
var context = DataConext();
var query = context.Person;
if (!string.IsNullOrEmpty(lblName.Text)
{
query.Where(p=>p.Name == lblName.Text);
}
if (!string.IsNullOrEmpty(lblFamily.Text)
{
query.Where(p=>p.Family == lblFamily.Text);
}
var result = query.ToList();
فکر میکنم کد به اندازه کافی گویا باشه. شما با استفاده از یکسری شرط Where های بیشتری رو به query اضافه می کنید و در نهایت با استفاده از متد ToList کوئری به سمت database فرستاده می شود و نتیجه مطلوب حاصل می شود
نقل قول: فیلتر روی گرید با linq
سلام
ممنونم ازتون
میشه خواهش کنم . روی یک نمونه کوچیک بهم نشونش بدید؟
(اخه ممکنه توی یک لیبل چند تا ایتم باشه و ستون مورد نظر باید براساس مثلا سه ایتم فیلتر بشه)
ممنون میشم
نقل قول: فیلتر روی گرید با linq
نقل قول:
نوشته شده توسط
mafaman2003
خوب جناب
gwbasic دو آیتمیش رو نشون دادند ، شما آیتم سوم رو با یک if دیگه اضافه کنید. در این جستجوی پیشرفته با خالی بودن هر لیبل شرط if برقرار نیست و اون لیبل در فیلتر اطلاعات شرکت نمیکنه.
سلام
ممنون
من این جوری نوشتم اما هیچ اتفاقی رخ نمیده و انگار نه انگار
Form2 d = new Form2();
d.ShowDialog();
testaDataContext Bank = new testaDataContext();
var query = Bank.t1s;
if (!string.IsNullOrEmpty(d.lbfilter.Text))
{
query.Where(p=>p.nam == d.lbfilter.Text );
}
if (!string.IsNullOrEmpty(d.lbfilter1.Text))
{
query.Where(p=>p.famil == d.lbfilter1.Text);
}
var result = query.ToList();
خواهش میکنم راهنمایی کنید
(راستی p توی کد چیه؟)
نقل قول: فیلتر روی گرید با linq
شما باید debug کنید ببینید که چه چیزی برگردونده می شه ببنید داخل result چی هست. اگر چیزی نیست احتمالا بر اساس فیلتر مورد نظر رکوردی برای برگرداندن وجود نداره. برای اینکه مطمئن بشین چیزی برگردانده می شه داخل فرم چیزی رو انتخاب نکنید تا لیبل ها خالی باشند و درنتیجه هیچکدام از where ها اجرا نشه و تمام رکوردهای موجود در t1s (این چه جور نامگذاریه!!!) برگردونده بشه.
در ضمن داخل where از عبارت لامبدا استفاده شده و p و یا هر نام دیگه ای رو که در نظر می گیرید نماینده اون type خواهد بود. عبارتهای لامبدا رو بررسی کنید
نقل قول: فیلتر روی گرید با linq
نقل قول:
نوشته شده توسط
gwbasic
شما باید debug کنید ببینید که چه چیزی برگردونده می شه ببنید داخل result چی هست. اگر چیزی نیست احتمالا بر اساس فیلتر مورد نظر رکوردی برای برگرداندن وجود نداره. برای اینکه مطمئن بشین چیزی برگردانده می شه داخل فرم چیزی رو انتخاب نکنید تا لیبل ها خالی باشند و درنتیجه هیچکدام از where ها اجرا نشه و تمام رکوردهای موجود در t1s (این چه جور نامگذاریه!!!) برگردونده بشه.
در ضمن داخل where از عبارت لامبدا استفاده شده و p و یا هر نام دیگه ای رو که در نظر می گیرید نماینده اون type خواهد بود. عبارتهای لامبدا رو بررسی کنید
سلام
ممنون از راهنمایی تون
چک کردم مقدار result رو مینویسه count=2 لیبل ها هم مقدار خودشون رو دارند
بدون مقدارم چک کردم اما در هر صورت انگار نه انگار
شما نمونه ای ندارید لطف کنید و بذارید؟
ممنون میشم راهنمایی کنید
نقل قول: فیلتر روی گرید با linq
خوب حله دیگه result داده جدید شماست که فیلتر شده به گرید فرم بایند کنید
dataGridView.DataSource = result;
نقل قول: فیلتر روی گرید با linq
سلام
ممنون
اما
همچنان انگار نه انگار....!!!!!!!!!!!!بی تاثیره
نقل قول: فیلتر روی گرید با linq
سلام
دوستان کسی نمیدونه من باید چی بنویسم تا درست شه؟؟؟
ممنون میشم کمکم کنید:ناراحت:
نقل قول: فیلتر روی گرید با linq
سلام
دوستان کسی نمیدونه من باید چی بنویسم تا درست شه؟؟؟
ممنون میشم کمکم کنید:ناراحت:
نقل قول: فیلتر روی گرید با linq
شما در فرم كه گريدويو است يك تابع تعريف كن كه كار فيلتر را انجام بده .دوما در در فرم كه گريد وجود دارد يك متغير پابليك و استاتيك از نوع خود فرم تعريف كن مثل public static frm_main frmp; سپس در رويداد لود همين فرم بنويس frmp=this; حالا بر توي فرم كه ليبل وجودارد توي رويداد كليك دكمه كه بر مگردي تو صفحه اي كه گريد ويو وجو دارد بنويس (...,frm_main .frmp.functionmame(label1.text,label.text
تابع بايد به صورت زير باشه:
public void filter(string a,string b(
{
var sql=db.table_a.where(p=>p.name==a && p.family==b,...(
datagridview1.datasource=sql;
}
نقل قول: فیلتر روی گرید با linq
15 تا پست زده شده هنوز شما جواب نگرفتین!!! ببینین شما کد نوشتین بنابراین ما نمی دونمیم دقیقا چی نوشتین؟ خوب اگه می بینین به جواب نرسیدین کدتون رو بطور کامل بذارین اینجا...
این مورد رو هم بررسی کنید: وقتی resultرو می خواین به گرید بایند کنین ابتدا Datasourceش رو خالی کنید
dataGridView.DataSource = null;
dataGridView.DataSource = result;
نقل قول: فیلتر روی گرید با linq
سلام
من توی فرم فیلتر برا انتقال ایتم به لیبل این کد رو در select change لیست نوشتم
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if(listBox1.SelectedItem=!null)
{
label1.Text += listBox1.SelectedItem.ToString()+",";
}
else
{
label1.text="";
}
}
و در فرم اول در کلید فیلتر این کد رو
Form2 d = new Form2();
d.ShowDialog();
testaDataContext Bank = new testaDataContext();
var query = Bank.t1s;
if (!string.IsNullOrEmpty(d.lbfilter.Text))
{
query.Where(p=>p.nam == d.lbfilter.Text );
}
//if (!string.IsNullOrEmpty(d.lbfilter1.Text))
// {
// query.Where(p=>p.famil == d.lbfilter1.Text);
//}
var result = query.ToList();
dataGridView1.DataSource = null;
dataGridView1.DataSource = result;
بازم جواب نمیده..!!!!