رفرش نشدن DATAGRID بعد از UPDATE
سلام.
من دیتاگرید رو بعد از UPDAte کرد ، itemsource اون رو تغییر می دم تا رفرش بشه اما متاسفانه رفرش نمیشه.
در ایجاد کردن و حذف کردن از همین روش استفاده می کنم کار می کنه اما در update کار نمی کنه.
datagrid.items.refresh() رو هم استفاده کردم اما باز هم درست نشد.
نقل قول: رفرش نشدن DATAGRID بعد از UPDATE
اين كاري كه شما انجام ميدين صحيح نيست
نبايد ItemsSource رو هر دفعه ست كنين! اينجوري كل رديف هاي ديتاگريد هر دفعه رندر ميشن و اگه تعداد بالا باشه پرفورمنس مياد پايين.
class اي كه ساختي بايد INotifyPropertyChanged رو پياده سازي كنه و براي Property هايي كه آپديت ميشن بايد هنگام تغيير، ايونت PropertyChanged فاير بشه.
نقل قول: رفرش نشدن DATAGRID بعد از UPDATE
ممنون. اگه امکان داره نمونه کد بدین ممنون میشم.
نقل قول: رفرش نشدن DATAGRID بعد از UPDATE
منم همین مشکل رو دارم
تازه هم با این mvvm آشنا شدم. هیچی ازش نمیفهمم.
میشه نمونه کد بزارید؟
نقل قول: رفرش نشدن DATAGRID بعد از UPDATE
نقل قول:
نوشته شده توسط
سیدسبحان
منم همین مشکل رو دارم
تازه هم با این mvvm آشنا شدم. هیچی ازش نمیفهمم.
میشه نمونه کد بزارید؟
http://danrigby.com/2012/01/08/inoti...hejlsberg-way/
نقل قول: رفرش نشدن DATAGRID بعد از UPDATE
نقل قول:
نوشته شده توسط
elec60
ممنون از شما
نقل قول: رفرش نشدن DATAGRID بعد از UPDATE
نقل قول:
نوشته شده توسط
elec60
اين كاري كه شما انجام ميدين صحيح نيست
نبايد ItemsSource رو هر دفعه ست كنين! اينجوري كل رديف هاي ديتاگريد هر دفعه رندر ميشن و اگه تعداد بالا باشه پرفورمنس مياد پايين.
class اي كه ساختي بايد INotifyPropertyChanged رو پياده سازي كنه و براي Property هايي كه آپديت ميشن بايد هنگام تغيير، ايونت PropertyChanged فاير بشه.
سلام. ممنون میشم نمونه کدی قرار بدید
نقل قول: رفرش نشدن DATAGRID بعد از UPDATE
نقل قول:
نوشته شده توسط
Mori Bone
سلام. ممنون میشم نمونه کدی قرار بدید
فرض کنيد کلاس Person رو داريم که خاصيت های Id و Name داره و يه ليست از نمونه های Person ساختيم و ItemsSource یه DataGrid رو برابر اين ليست قرار داديم. در اين صورت Datagrid رکوردهای موجود رو نمايش ميده. اما اگه مثلا Name يکی از اين Person ها رو تغيير بديم DataGrid اين تغيير رو متوجه نميشه و نمايش نميده(مقدار قبلی رو نمايش ميده) که طبيعی هم هست. چون DataGrid بدبخت از کجا ميخواد بفهمه که ويرايشی صورت گرفته(نميتونه که دايم چک کنه ببينه ويرايش داريم يا نه!) اما اگه خود Person ای که ويرايش ميشه به DataGrid خبر یده که من ويرايش شدم DataGrid هم تغييرات رو دريافت ميکنه و تو نمايش لحاظ ميکنه. برای اينکه کلاس Person اين قابليت رو داشته باشه که وقتی ويرايش شد خبر بده بايد interface ای به اسم INotifyPropertyChanged رو پياده سازی کنه و داريم:
class Person : INotifyPropertyChanged{
public event PropertyChangedEventHandler PropertyChanged;
public int Id { get; set; }
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
var PC = PropertyChanged;
if (PC != null)
PC(this, new PropertyChangedEventArgs(nameof(Name)));
}
}
}
}
نقل قول: رفرش نشدن DATAGRID بعد از UPDATE
تو قسمت set مربوط به خاصيت Name از کلمه کليدی nameof استفاده کرديم که تو C#6.0 معرفی شده. اين کلمه کليدی اسم خاصيت Name رو بر میگردونه!
بجای PC(
this, new PropertyChangedEventArgs(nameof(Name)));
میشه از PC(this, new PropertyChangedEventArgs(nameof("Name")));
هم استفاده کرد. اما بهتره از عملگر nameof استفاده کنيم چون ممکنه اسم رو به صورت استرينگ اشتباه بنويسيم و دليل محکمتر اينکه اگه در آينده بخواييم refactoring انجام بديم با nameof کارمون خيلی ساده تر ميشه و نيازی نيست که اسم رو به صورت استرينگی، دستی تغيير بديم. کلا با رشته ها امکان ديباگ در زمان کامپايل رو از دست ميديم.
البته از Attribute ای به اسم [CallerMemberName] هم که تو C#5.0 معرفی شده ميشه استفاده کرد اما اين صفت و يا Attribute در runtime اسم فيلد رو برمی گردونه ولی nameof در compile time