نمایش نتایج 1 تا 14 از 14

نام تاپیک: فیلتر روی گرید با linq

  1. #1

    Question فیلتر روی گرید با linq

    سلام
    دوستان من یک برنامه دارم که توی فرم اصلی یک گرید دارم
    یک کلید فیلتر هم دارم
    که وقتی کلید فیلتر رو میزنم یک فرم باز میشه که دارای پنج لیست باکس و پنج لیبل هست
    که با توجه به مقادیر ستون های گرید اطلاعات در لیست ها بایند شده)
    با انتخاب هر ایتم از لیست باکس ها اون ایتم توی لیبل مربوطه وارد میشه(تا اینجا مشکلی ندارم)
    حالا
    میخوام وقتی کاربر از لیست ها ایتمهای مورد نظرش رو انتخاب کرد (و ایتم ها وارد لیبل ها شدند) براساس ایتم های توی لیبل ها
    با بسته شدن فرم دوم فیلتر بر روی گرید توی فرم اصلی اعمال بشه
    اما نمیدونم باید توی کلید فیلتر روی فرم اصلی چی بنویسم که به این هدف برسم؟؟؟(البته با linq)
    خواهش میکنم راهنمایی کنید(اگه نمونه ای دارید لطف کنید و بذارید)(لطفا)
    ممنونم

  2. #2

    نقل قول: فیلتر روی گرید با linq

    سلام

    ابتدا کامپوننت BindingSource فرم اصلی رو public کن تا تو فرم فیلتر بتونی بهش دست پیدا کنی. بعد با استفاده از خاصیت Filter این کامپوننت رکوردها رو فیلتر کن:
    http://msdn.microsoft.com/en-us/libr...ce.filter.aspx

    با متد RemoveFilter فیلتر رو پاک کن.

    زمانی که متد هایی برای انجام یک کار وجود دارد نباید راه ساختگی را در پیش بگیریم.

  3. #3
    VIP آواتار gwbasic
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    سن
    42
    پست
    982

    نقل قول: فیلتر روی گرید با 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 فرستاده می شود و نتیجه مطلوب حاصل می شود

  4. #4

    نقل قول: فیلتر روی گرید با linq

    سلام
    ممنونم ازتون
    میشه خواهش کنم . روی یک نمونه کوچیک بهم نشونش بدید؟
    (اخه ممکنه توی یک لیبل چند تا ایتم باشه و ستون مورد نظر باید براساس مثلا سه ایتم فیلتر بشه)

    ممنون میشم

  5. #5

    نقل قول: فیلتر روی گرید با 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 توی کد چیه؟)

  6. #6
    VIP آواتار gwbasic
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    سن
    42
    پست
    982

    نقل قول: فیلتر روی گرید با linq

    شما باید debug کنید ببینید که چه چیزی برگردونده می شه ببنید داخل result چی هست. اگر چیزی نیست احتمالا بر اساس فیلتر مورد نظر رکوردی برای برگرداندن وجود نداره. برای اینکه مطمئن بشین چیزی برگردانده می شه داخل فرم چیزی رو انتخاب نکنید تا لیبل ها خالی باشند و درنتیجه هیچکدام از where ها اجرا نشه و تمام رکوردهای موجود در t1s (این چه جور نامگذاریه!!!) برگردونده بشه.
    در ضمن داخل where از عبارت لامبدا استفاده شده و p و یا هر نام دیگه ای رو که در نظر می گیرید نماینده اون type خواهد بود. عبارتهای لامبدا رو بررسی کنید

  7. #7

    نقل قول: فیلتر روی گرید با linq

    نقل قول نوشته شده توسط gwbasic مشاهده تاپیک
    شما باید debug کنید ببینید که چه چیزی برگردونده می شه ببنید داخل result چی هست. اگر چیزی نیست احتمالا بر اساس فیلتر مورد نظر رکوردی برای برگرداندن وجود نداره. برای اینکه مطمئن بشین چیزی برگردانده می شه داخل فرم چیزی رو انتخاب نکنید تا لیبل ها خالی باشند و درنتیجه هیچکدام از where ها اجرا نشه و تمام رکوردهای موجود در t1s (این چه جور نامگذاریه!!!) برگردونده بشه.
    در ضمن داخل where از عبارت لامبدا استفاده شده و p و یا هر نام دیگه ای رو که در نظر می گیرید نماینده اون type خواهد بود. عبارتهای لامبدا رو بررسی کنید
    سلام
    ممنون از راهنمایی تون
    چک کردم مقدار result رو مینویسه count=2 لیبل ها هم مقدار خودشون رو دارند
    بدون مقدارم چک کردم اما در هر صورت انگار نه انگار
    شما نمونه ای ندارید لطف کنید و بذارید؟
    ممنون میشم راهنمایی کنید

  8. #8
    VIP آواتار gwbasic
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    سن
    42
    پست
    982

    نقل قول: فیلتر روی گرید با linq

    خوب حله دیگه result داده جدید شماست که فیلتر شده به گرید فرم بایند کنید

    dataGridView.DataSource = result;

  9. #9

    نقل قول: فیلتر روی گرید با linq

    سلام
    ممنون
    اما
    همچنان انگار نه انگار....!!!!!!!!!!!!بی تاثیره

  10. #10

    نقل قول: فیلتر روی گرید با linq

    سلام
    دوستان کسی نمیدونه من باید چی بنویسم تا درست شه؟؟؟
    ممنون میشم کمکم کنید

  11. #11

    نقل قول: فیلتر روی گرید با linq

    سلام
    دوستان کسی نمیدونه من باید چی بنویسم تا درست شه؟؟؟
    ممنون میشم کمکم کنید

  12. #12

    نقل قول: فیلتر روی گرید با 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;
    }

  13. #13
    VIP آواتار gwbasic
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    سن
    42
    پست
    982

    نقل قول: فیلتر روی گرید با linq

    15 تا پست زده شده هنوز شما جواب نگرفتین!!! ببینین شما کد نوشتین بنابراین ما نمی دونمیم دقیقا چی نوشتین؟ خوب اگه می بینین به جواب نرسیدین کدتون رو بطور کامل بذارین اینجا...
    این مورد رو هم بررسی کنید: وقتی result‌رو می خواین به گرید بایند کنین ابتدا Datasource‌ش رو خالی کنید

    dataGridView.DataSource = null;
    dataGridView.DataSource = result;

  14. #14

    نقل قول: فیلتر روی گرید با 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;
    بازم جواب نمیده..!!!!

تاپیک های مشابه

  1. گذاشتن فیلتر بر روی گرید ویو
    نوشته شده توسط F.zeinali در بخش C#‎‎
    پاسخ: 3
    آخرین پست: پنج شنبه 08 دی 1390, 18:23 عصر
  2. اعمال فیلتر روی تصاویر
    نوشته شده توسط azmoodeh در بخش VB.NET
    پاسخ: 1
    آخرین پست: دوشنبه 03 اردیبهشت 1386, 08:45 صبح
  3. فیلتر روی فیلد و تغییرات فیلد و اعمال مجدد فیلتر
    نوشته شده توسط spicirmkh در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 2
    آخرین پست: سه شنبه 12 مهر 1384, 17:37 عصر
  4. فیلتر روی فیلد عددی
    نوشته شده توسط Mohammad S در بخش برنامه نویسی در Delphi
    پاسخ: 5
    آخرین پست: جمعه 30 مرداد 1383, 23:23 عصر
  5. جستجوو یا فیلتر روی فیلد از نوع Memo
    نوشته شده توسط spicirmkh در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: یک شنبه 27 اردیبهشت 1383, 09:00 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •