WPF שמירת שינויים בדטה גריד
-
חיברתי בבינדינג דטה גריד לדטה סט, ושמתי לב שהטבלה המוצגת בדטה גריד לא מתעדכנת מיד כשהמשתמש עוזב תא מסויים ועובר לתא שלידו אלא דווקא כאשר הוא עובר לתא בשורה אחרת או לוחץ על פקדים אחרים בטופס.
תופעה זו יכולה לגרום לאיבוד נתונים אם המשתמש ערך תא ומיד סגר את התוכנה לפני שהעבר לשורה אחרת.
אז איך אני יכול לגרום שהמיד בעזיבת התא הטבלה בדטה סט תתעדכן ע''י הבינדינג?
ושאלה שניה איך אני יכול לבדוק בשעת סגירת התוכנה אם המשתמש ערך איזה תא והשאיר את התא במצב עריכה ובא לסגור את התוכנה, ואם זה מה שקרה איך שומרים את תוכן התא ה'פתוח' ?
תודה לכולם וחודש אדר שמח !פורסם במקור בפורום CODE613 ב03/03/2014 19:58 (+02:00)
-
חיברתי בבינדינג דטה גריד לדטה סט, ושמתי לב שהטבלה המוצגת בדטה גריד לא מתעדכנת מיד כשהמשתמש עוזב תא מסויים ועובר לתא שלידו אלא דווקא כאשר הוא עובר לתא בשורה אחרת או לוחץ על פקדים אחרים בטופס.
תופעה זו יכולה לגרום לאיבוד נתונים אם המשתמש ערך תא ומיד סגר את התוכנה לפני שהעבר לשורה אחרת.
אז איך אני יכול לגרום שהמיד בעזיבת התא הטבלה בדטה סט תתעדכן ע''י הבינדינג?
Dעדכון תא באופן מיידי זה ע"יinotify property changed
הבעיה שדטה סט לא עובד עם זה ולכן צריך במקרה כזה לחבר את הדטה סט למחלקות כפי שדובר בפורום כבר בעבר
אפשר לחבר לאירוע של שינוי אבל לענ"ד זה קצת מוגזם לעשות כך לכל תא
גם ב-notify יתכן שזה לא כ"כ כדאי בטח יש כאן אנשים שמבינים יותר טוב בזה
אולי זה יפתור לך גם את שאלתך השניה במקצתפורסם במקור בפורום CODE613 ב03/03/2014 22:30 (+02:00)
-
אם הבנתי נכון מה ששמואל אמר אז הבינדינג צריך להראות כך:
BindingOperations.SetBinding(myDataGrid, ItemsControl.ItemsSourceProperty, New Binding With {.NotifyOnTargetUpdated = True, .UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged})
אבל זה לא עוזר
פורסם במקור בפורום CODE613 ב04/03/2014 13:27 (+02:00)
-
אם הבנתי נכון מה ששמואל אמר אז הבינדינג צריך להראות כך:
עדכון תא באופן מיידי זה ע"יinotify property changed
[u:hn7r01xj]הבעיה שדטה סט לא עובד עם זה ולכן צריך במקרה כזה לחבר את הדטה סט למחלקות כפי שדובר בפורום כבר בעבר [/u:hn7r01xj]
אפשר לחבר לאירוע של שינוי אבל לענ"ד זה קצת מוגזם לעשות כך לכל תא
גם ב-notify יתכן שזה לא כ"כ כדאי בטח יש כאן אנשים שמבינים יותר טוב בזה
אולי זה יפתור לך גם את שאלתך השניה במקצתאכן לא הבנת.
הוא אמר שבמקום לתת את הDataSet כמקור ישיר לתצוגה, עליך ליצור מחלקה עבור שורה, ומחלקה עבור הטבלה, ש"עוטפים" את הגישה לDataSet. המחלקה ברמת שורה תממש את הNotify, ובמאפיינים הנדרשים תעורר את האירוע אחרי השינוי.
שמואל וארכיטקט שהולכים בדרך זו מאכלסים ממש את הנתונים במחלקות בנפרד מהDataSet (ככה הבנתי), אני חושב שזה בזבוז משאבים ואפשר ל"עטוף" - המאפיינים סה"כ מגשרים בין התצוגה לDataRow.פורסם במקור בפורום CODE613 ב04/03/2014 13:47 (+02:00)
-
לא ברור לי למה צריך לעטוף?
הרי אם אני נותן את הטבלה שבדטה סט כמקור השורות של הדטה גריד יש בינהם תיקשורת מצויינת לשני הכיוונים אלא שמשום מה הדטה גריד לא מעדכן את הטבלה אלא כשעוזבים את השורה ולא כשמסיימים לערוך את התא.
איך העטיפה אמורה לעזור כאן? הבעיה היא בדטה גריד?דבר שני, כל הבעיה הזו לא כל כך נוראה שצריך לעשות מחלקות כל כל רבות ולסבך את העסק, החשש הוא רק שאם המשתמש יערוך תא ולא יעביר את הפוקוס לפקד אחר או שורה אחרת ומיד יסגור את התוכנה העריכה תאבד, אולי אפשר לעשות איזה טריק לפני הסגירה להעביר את הפוקוס ואז ארוע שינוי שורה כן יקפוץ או משהו דומה, זה הרבה יותר פשוט.
ניסיתי גם להשתמש בארוע ColumnChanged אבל גם הוא קופץ רק לאחר שהפוקוס זז לשורה אחרת.
פורסם במקור בפורום CODE613 ב04/03/2014 14:07 (+02:00)