PDA

View Full Version : سوال: مشکل در وصل کردن دیتاگریدویو به لیست ژنریک



man_iran
پنج شنبه 14 بهمن 1389, 01:03 صبح
وقتی توی برنامه دیتاگریدویو را به یه دیتاتیبل وصل می کنید (از طریق دیتاسورس) تمام اطلاعات جدول نمایش داده می شه و اگر توی جدول مقداری اضافه کنید خود بخود توی دیتاگرید هم اضافه می شه.
ولی اگر دیتاگرید ویو را به یه لیست ژنریک وصل کرده باشیم فقط اطلاعت موجود توی لیست در زمان لود فرم، به دیتاگردیو اضافه می شه و اگر تغییری توی لیست انجام بدیم توی دیتاگریدویو اعمال نمی شه مگر اینکه دیتاسورس دیتاگردیدویو را قطع و وصل کنیم.

چرا؟
اگر بخوایم مثل دیتاتیبل عمل کنه باید چه کنیم؟

man_iran
پنج شنبه 14 بهمن 1389, 11:13 صبح
یعنی کسی راه حلی نداره؟

Reza_Yarahmadi
پنج شنبه 14 بهمن 1389, 13:08 عصر
ولی اگر دیتاگرید ویو را به یه لیست ژنریک وصل کرده باشیم فقط اطلاعت موجود توی لیست در زمان لود فرم، به دیتاگردیو اضافه می شه و اگر تغییری توی لیست انجام بدیم توی دیتاگریدویو اعمال نمی شه مگر اینکه دیتاسورس دیتاگردیدویو را قطع و وصل کنیم.
بعد از تغییر لیست فرم رو Refresh کنید.

this.Refresh();

man_iran
پنج شنبه 14 بهمن 1389, 13:25 عصر
خب اگر قرار باشه رفرش کنم! میام و دیتاسورس را قطع و وصل می کنم بهتره. اینطوری دیگه بقیه اطلاعات موجود توی فرم رفرش نمی شن.
ولی من نمی خوام برای هر بار درج، حذف و... بیام کل اطلاعات دیتاگریدویو را رفرش کنم می خوام اگر اطلاعات جدید به لیست ارسال کردم به دیتاگردیو هم ارسال بشه.

Reza_Yarahmadi
پنج شنبه 14 بهمن 1389, 19:54 عصر
خب اگر قرار باشه رفرش کنم! میام و دیتاسورس را قطع و وصل می کنم بهتره. اینطوری دیگه بقیه اطلاعات موجود توی فرم رفرش نمی شن.
قطع و وصل کردن دیتاسورس باعث ست شدن تنظیمات متعددی روی دیتاگرید میشه که این سربار زیادی داره در حالی که رفرش کردن گرید فقط بخش گرافیکی کار دوباره انجام میشه (این بخش از کار در قطع و وصل کردن 2 بار انجام میشه).

ولی من نمی خوام برای هر بار درج، حذف و... بیام کل اطلاعات دیتاگریدویو را رفرش کنم می خوام اگر اطلاعات جدید به لیست ارسال کردم به دیتاگردیو هم ارسال بشه.
این رفرش کردن دیتا نیست ، رفرش کردن نمایش (Redraw) کنترلها است. برای امتحان بعد از تغییر دادن لیست هیچ کدی ننویسید و فقط فرم رو Minimize و دوباره به حالت اول برش گردونید ، خواهید دید که تغییرات انجام شده. در صورتی که ابزارهای سنگینی روی فرم دارید بهتره فقط دیتاگرید رو رفرش کنید

dataGridView1.Refresh();

man_iran
پنج شنبه 14 بهمن 1389, 20:31 عصر
سلام
ممنون از جواب. ولی هیچکدام از کدها جوابگو نیست

گفته بودم. نمی دونم چرا نحوه وصل کردن دیتاگریدویو به لیست سفارشی مثل دیتاتیبل نیست!

hakelberfin
پنج شنبه 14 بهمن 1389, 21:24 عصر
سلام
میتونید یه تابع بنویسید که جدولتون رو پر کنه و بعد از جدید یا حذف یا ویرایش اونو فراخوانی کنید


public void FillDataGridView()
{
BindingList<YourType> reminders = new BindingList<YourType>();
...
this.dataGridView1.DataSource = reminders;
}
#endregion

man_iran
پنج شنبه 14 بهمن 1389, 22:00 عصر
خب مشکل اصلی اینجاست که لیستی که شما دارید برای هر بار رفرش کردن دیتاگریدویو آن را نیو می کنید من آن را در جایی دیگه و به صورت ایستا دارم.

hakelberfin
پنج شنبه 14 بهمن 1389, 23:23 عصر
public static List<ReminderObject> reminders = new List<ReminderObject>();
public static List<ReminderObject> GetReminders()
{
return reminders;
}
public void FillDataGridView()
{
BindingList<ReminderObject> reminders = new BindingList<ReminderObject>(ReminderList.GetReminders());
this.dataGridViewReminder.DataSource = reminders;
}

man_iran
جمعه 15 بهمن 1389, 00:06 صبح
خب این هم که شد همون! شما دارید یک لیست جدید می سازید و از لیست اصلی می خونید. بعد لیست جدید ایجاد شده را به دیتاگریدویو وصل می کنید. یعنی با هر بار درج، حذف و... لیست موجود توی دیتاگریدویو کامل از اول بروز می شه. که باعث سربارگزاری می شه اگر قرار باشه این کار را بکنم خب نیای به این همه کد نیست فقط کافیه دیتاسورسش را قطع و وصل کنم. یک بار نال بدم بعد دوباره وصلش کنم این طوری می شه همون کد شما

man_iran
شنبه 16 بهمن 1389, 01:11 صبح
یعنی راه حل دیگه ای نداره؟