WPF DataGrid - קיבוע שורה נבחרת בראש ה DataGrid
-
יש לי ComboBox שהטמפלט של האייטמס הוא DataGrid.
ובכן, במידה ונבחרה ערך מסויים (שהוא בעצם ערך מתוך ה DataGrid), אני רוצה שהערך הזה יהיה בראש ה DataGrid, ואז כשהמשתמש יפתח את הרשימה (Combobox), הוא מיד יראה את הערך מודגש ובראש ה DataGrid.להלן הקוד שקודדתי ב- ComboBox ע"מ שיתבצע בטעינת ה DataGrid שבתוך ה ComboBox:
Private Sub DataGrid_Loaded(sender As DataGrid, e As RoutedEventArgs) Handles DataGrid.Loaded If Me.SelectedItem Is Nothing Then Exit Sub DataGrid.SelectedItem = SelectedItem Dim sv = sender.FindVisualChild(Of ScrollViewer) If sv IsNot Nothing Then sv.ScrollToEnd() DataGrid.ScrollIntoView(SelectedItem) sender.Focus() End Sub
[u:fre0wxnl]אסביר קצת על הקוד:[/u:fre0wxnl]
בתחילה (שורה 3) אני קובע שהרשומה הנבחרת ב DataGrid תהיה הערך הנבחר ב ComboBox.
לאחר מכן (שורה 4,5) אני מחפש את ה ScrollViewer ואני מגלגל אותו לסוף ה DataGrid (בהמשך אסביר למה אני צריך את זה).
אח"כ (שורה 6) אני מדפדף ל רשומה הנבחרת.
אח"כ (שורה 7) אני מעביר את הפוקוס ל DataGrid כדי שהרשומה הנבחרת תהיה מספיק מודגשת (כאשר זה לא בפוקוס, הרשומה הנבחרת לא מודגשת מספיק).
הסיבה שהייתי צריך לגלגל את ה Scriller לסוף הDataGrid, שאם לא כן, הדפדוף לרשומה הנבחרת לא מביא אותו לראש ה DataGrid, אלא רק עש שהוא נראה, ולכן אם הוא מגיע מהסוף אז הוא נשאר בראש הרשימה.הבעייה היא שהקוד השזה לא תמיד עובד, זאת אומרת - לעתים קרובות הדפדוף עד הסוף עובד, אבל הדפדוף לרשומה הנבחרת לא עובד. לא הצלחתי להבין את הסיבה.
מישהוא יכול לעזור לי בזה, או לתת לי פיתרון אחר ? זה נורא דחוף לי אני כבר מתעסק עם זה מדי הרבה זמן. תודה מראש
פורסם במקור בפורום CODE613 ב28/12/2016 14:12 (+02:00)
-
משהו לא מובן פה:
@tchayimיש לי ComboBox שהטמפלט של האייטמס הוא DataGrid.
משמע שכל פריט בקומבו הוא דטה גריד שלם
ובכן, במידה ונבחרה ערך מסויים (שהוא בעצם ערך מתוך ה DataGrid)
כאן משמע שכל פריט בקומבו הוא פריט בדטה גריד כלשהוא
אולי התכוונת שהאייטמס-סורס של הקומבו זה האייטמס-סורס של הדטה גריד?
פורסם במקור בפורום CODE613 ב28/12/2016 15:28 (+02:00)
-
אכן סליחה על הסתירה, לא התעמקתי בזה, מכיון שעיקר נקודת השאלה היא לגבי הדטה גריד, במקרה שלי זה בתוך קומבו.
התכונתי שהטמפלט של כל האייטמס הוא דטה גריד, זאת אומרת שהאייטמס מוצגים כדטה גריד (באמצעות ComboBox.ItemContainerStyle).
בכל אופן, תודה על התייחסותךפורסם במקור בפורום CODE613 ב28/12/2016 16:01 (+02:00)
-
תודה למגיבים.
אני חושב שלא הקומבו בוקס העניין פה, השאלה היא לגבי הדטה גריד, במקרה זה בתוך קומבו.
ושוב השאלה היא לגבי דטה גריד, מה השיטה הנכונה לגרום לרשומה הנבחרת להיות מוצג בראש הדטה גריד ?, לא מספיק לי שיהיה בפוקוס, חשוב לי שיהיה ממש בראש הגריד, כלומר בשורה הראשונה. אל תתיחסו בבקשה לקומבו.
שאלתי גם ב stackoverflow
תודהפורסם במקור בפורום CODE613 ב28/12/2016 23:59 (+02:00)
-
אני לא רוצה להעביר את הרשומה הנבחרת ממש לראש הדטה גריד, אלא אני רוצה לדפדף את הדטה גריד כך שהרשומה הנבחרת ימוקם בראש ביחס לכל הרשומות בפוקוס, אבל אני משאיר את הרשומה באותו מספר שורה (כלומר, האינדקס שלו, לא יהיה במיקום 0 אלא ישאר באותו מיקום). מקוה שהסברתי את עצמי נכון.
תשובה בכל אופן יש למישהוא ?פורסם במקור בפורום CODE613 ב29/12/2016 13:09 (+02:00)