سلام. من یک دیتاگرید در سی شارپ wpf دارم. وقتی که یک ردیف رو آپدیت میکنم برای اینکه تغییرات در دیتاگرید نمایش داده بشه باید کل دیتاگرید رو رفرش کنم تا تغییرات اون ردیف رو ببینم و این خیلی زمان بر هست و دیتاگرید هم موقع رفرش پرش میکنه به ردیف اول و اصلا جالب نیست. حالا من چکار کنم که بتونم فقط همون ردیفی رو که انتخاب کردم رو رفرش کنم نه کل دیتاگرید رو.
ممنون میشم راهنمایی بفرمایید.
فکر نمیکنم این کار قابل انجام باشه در DataGrid در WPF
چون نحوه Bind کردن اطلاعات در دیتاگرید با استفاده از ItemSource انجام میشه
dataGrid1.ItemsSource = query;
یعنی وقتی میخواید اطلاعات رو توی دیتاگرید در WPF نمایش بدید کل اطلاعات واکشی شده از سمت دیتابیس رو مستقیم می ریزید توی ItemSource. پس دیتاگرید مجددا از اول اطلاعاتش پر میشه.
راه حل: اگر تعداد رکوردهای شما زیاده و باعث کند شدن برنامه میشه بهتره با استفاده از دستور Top در sql مثلا 100 رکورد یا نهایتا 500 رکورد رو واکشی کنید. و با استفاده از جستجو به کاربر امکان این رو بدید که توی سایر رکورد ها هم جستجو کنه.
سلام. دوست عزیز شما از یه روش میتونی استفاده کنی که بعد از اینکه گزینه ای رو توی دیتاگرید در دیتابیس تغییر دادی بعدش بیای همون گزینه رو توی دیتاسورس دیتاگرید هم تغییر بدی. مثلا شما یه جدولی با نام Persons در دیتابیس با سه ستون PersonID , PersonName , PersonFamily دارید حالا پس از تغییر در جدول بجای اینکه دوباره دیتاگرید رو رفرش کنید و از اول مقدار بدید یه سلکت از همون ردیفی که آپدیت کردید در دیتابیس بزنید و مقدار اون رو داخل یک کوئری بریزید و بعد تک تک ستون های دیتاسورس رو با استفاده از این کوئری آپدیت کنید.
var ID = (MyDataGrid.SelectedItem as Persons).PersonID;
var Quary = (from x in Db.Persons where x.PersonID == ID select x).SingleOrDefault();
var SelectedItem = (MyDataGrid.SelectedItem as Persons);
SelectedItem.PersonName = Quary.PersonName;
SelectedItem.PersonFamily = Quary.PersonFamily;
MyDataGrid.Items.Refresh();
دوستان ممنون بابت راهنمایی.
دوست گرامی Sowgandi کدی که نوشتید رو استفاده کردم یه مشکلی داره اونم اینکه بعد از اجرای کد دیتاگرید پرش میکنه به ردیف اول! البته بدون اینکه دوباره تابع لود دیتاگرید رو فراخوانی کنم دیتاگرید رفرش شد ولی چجوری میشه کاری کرد که دیتاگرید بعد از رفرش ثابت بمونه و پرش نکنه؟!
برای رفع این مشکل باید از کد زیر استفاده کنید.
var ID = (MyDataGrid.SelectedItem as Persons).PersonID;
var Quary = (from x in Db.Persons where x.PersonID == ID select x).SingleOrDefault();
(MyDataGrid.SelectedCells[1].Column.GetCellContent(item) as TextBlock).Text = Quary.PersonName;
(MyDataGrid.SelectedCells[2].Column.GetCellContent(item) as TextBlock).Text = Quary.PersonFamily;
در این حالت دیگه دیتاسورس شما تغییر نمیکنه و فقط UI دیتاگرید آپدیت میشه و هیچ پرشی هم در دیتاگرید ندارید. فقط توجه داشته باشید که دیتاسورس شما هیچ تغییری نمیکنه تا وقتی که مجدد دیتاگرید رفرش بشه. اگه میخواهید میتونید این کد و کد قبلی رو ترکیبی استفاده کنید تا ه دیتاسورس و هم UI دیتاگرید همزمان آپدیت بشه. در این صورت از کد زیر استفاده کنید.
var ID = (MyDataGrid.SelectedItem as Persons).PersonID;
var Quary = (from x in Db.Persons where x.PersonID == ID select x).SingleOrDefault();
var SelectedItem = (MyDataGrid.SelectedItem as Persons);
SelectedItem.PersonName = Quary.PersonName;
SelectedItem.PersonFamily = Quary.PersonFamily;
(MyDataGrid.SelectedCells[1].Column.GetCellContent(item) as TextBlock).Text = Quary.PersonName;
(MyDataGrid.SelectedCells[2].Column.GetCellContent(item) as TextBlock).Text = Quary.PersonFamily;
موفق باشید.
تاریخ :
1403/06/24
- ساعت :
08:52:00 PM
- بازدید :
335
- پاسخ :
1
|
تاریخ :
1398/09/16
- ساعت :
11:41:00 AM
- بازدید :
4299
- پاسخ :
1
|
تاریخ :
1398/09/07
- ساعت :
02:15:00 PM
- بازدید :
3898
- پاسخ :
5
|
تاریخ :
1403/05/16
- ساعت :
05:43:00 AM
- بازدید :
687
- پاسخ :
0
|
تاریخ :
1398/09/05
- ساعت :
06:04:00 PM
- بازدید :
3192
- پاسخ :
2
|
تاریخ :
1403/04/12
- ساعت :
07:27:00 PM
- بازدید :
673
- پاسخ :
0
|
تاریخ :
1398/09/14
- ساعت :
09:43:00 PM
- بازدید :
3329
- پاسخ :
2
|
تاریخ :
1398/09/17
- ساعت :
12:33:00 AM
- بازدید :
5881
- پاسخ :
2
|
تاریخ :
1402/04/18
- ساعت :
02:50:00 PM
- بازدید :
1256
- پاسخ :
1
|
تاریخ :
1402/01/19
- ساعت :
12:30:00 PM
- بازدید :
1574
- پاسخ :
1
|
تاریخ :
1403/09/06
- ساعت :
09:51:00 PM
- بازدید :
87
- پاسخ :
1
|
تاریخ :
1400/07/17
- ساعت :
10:39:00 PM
- بازدید :
2335
- پاسخ :
0
|
تاریخ :
1403/09/05
- ساعت :
06:32:00 PM
- بازدید :
70
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2037
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
149
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1067
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
474
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
948
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1378
- پاسخ :
1
|