+2 امتیاز

سلام

من یک لیست باکس دارم با یک دیتابیس اس کیو ال...

میخوام اطلاعات موجود در لیست باکس رو دونه دونه با دیتابیس چک کنه ( با استفاده از تکنولوژی  LINQ )  و هر نتیجه ای رو که پیدا کرد درون دیتاگریدویو نمایش بده.

با کدی که من نوشتم تمام نتایج رو پیدا میکنه ولی فقط آخرین نتیجه رو درون دیتاگریدویو نمایش میده. یعنی نتیجه اول رو نمایش میده ولی موقع نمایش نتیجه دوم ، اولی رو پاک میکنه و دومی رو نمایش میده...

حالا اگه بشه نتیجه اول رو نگه داشت و نتیجه دوم رو بهش اضافه کرد ، مشکل حل میشه...

            var db = new DataClasses1DataContext();

            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                
                var query = db.Ms.Where(c => c.names.Equals(listBox1.Items[i].ToString()));
                
                if (query.Count() == 0)
                {
                    MessageBox.Show("هیچ داده ای یافت نشد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    dataGridView1.DataSource = query;
                }
            }


   

لطفا راهنمایی کنید...

اگر هم کلا راه دیگری وجود دارد ، ممنون میشم راهنمایی کنید...

بسته شده

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

سلام ، 

شما به ازای هر سطری که در Listbox وجود داره اومدین یک کوئری بر روی بانک اطلاعاتی انجام دادین و نتیجه رو برگشت دادین ولیچون شما نتایج پرس و جو را داخل متغیر query قرار دادین و این متغیر داخل حلقه for هست در هر بار تکرار حلقه مقدار درونش خالی میشه و نتایج قبلی حذف میشن به همین خاطره که فقط نتیجه سطر آخر نمایش داده میشه . راه حل جایگزین این هست که شما یک بار داده های موجود در بانک رو با استفاده از متد Select واکشی کنید سپس بر روی نتایج آن عمل بررسی شرط را انجام دهید . چون در کد نویسی شما به ازای هر سطر موجود در ListBox یک کوئری بر روی بانک اطلاعاتی انجا می دهید و اگر تعداد سطر های آن زیاد باشد ، کارایی برنامه به شدت افت می کند. 

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

IEnumerable<tablePersonel> allPersonelsData = new DataClasses1DataContext().tablePersonels.ToList();
            List<tablePersonel> result = new List<tablePersonel>();

            //Temorary Variable for each record 
            tablePersonel personelToAdd = null;
            for (int counter = 0; counter < this.listBox1.Items.Count; counter++)
            {
                
                var query = allPersonelsData.Where(p => p.FirstName.Equals(listBox1.Items[counter].ToString()));
                
                if (query.Count() > 0)
                {
                    personelToAdd = query.Single();
                }

                if (personelToAdd != null)
	            {
                    result.Add(personelToAdd);

	            }
            }

            this.dataGridView1.DataSource = result.ToList();

البته نام ستون ها را بر اساس بانک اطلاعاتی موجود در برنامه خودتون بنویسید .

سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,919 کاربر

دسته بندی ها

...