WPF העתקת טבלה מדטה-גריד
-
כאשר אני בוחר את כל הדטה-גריד ע''י לחיצה על הלחצן שבפינה למעלה ולוחץ על קונטול+C הוא מעתיק לי את כל התוכן של הטבלה ואני יכול להדביק את הכל בוורד כטבלה ממש.
רק הבעיה היא עם החלקים הבאים:- שורת הכותרת לא מועתקת
- אם זו עמודה עם בורר תאריך לא מועתק התאריך
- אם זו עמודה מקושרת מועתק המספר של ה ID ולא הערך שאליו מפנה הID אף שהוא מופיע בתוך התאים של הדטה גריד.
מה הצעותכים בנידון?
תודה לכולם.פורסם במקור בפורום CODE613 ב19/01/2014 23:16 (+02:00)
-
קודם בדוק את המאפיין ClipboardCopyMode.
בשביל התאמות יותר מדוייקות תצטרך לטפל באירוע העתקה של הGrid כולו או של תא.
אני אף פעם לא התעסקתי עם זה, תנסה לחפש בנושא.
כמו"כ אתה יכול בפשטות לבנות את התוכן לבד, זה לא קשה מידי, תבדוק מה הוא עושה ותחקה אותו.פורסם במקור בפורום CODE613 ב20/01/2014 12:19 (+02:00)
-
הגדרתי את Me.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader
ובאמת הראשי העמודות הועתקו אבל הטקסט היה System.Windows.Controls.StackPanel :lol:כנראה כמו שאמרת צריך לעבוד מול ה DATATABLE על פי הבחירה בדטה גריד.
פורסם במקור בפורום CODE613 ב20/01/2014 13:44 (+02:00)
-
כל סוגי העמודות הצלחתי לעשות חוץ מ DataGridComboBoxColumn אם יש לעמודה הזו DisplayMemberPath אז לא בעיה להשיג את המחרוזת המוצגת, אבל אם אין כזה מאפיין כיון שהשתמשו ב ElementStyle ובתוך הסטייל יש כל מיני פקדים לא ידועים שיש להם כל מיני בינדינגים לאיזה מאפיינים שבטבלת האב אז אני כבר לא יודע איך לגשת לשם ולדעת באילו מאפיינים מדובר.
השאלה אם אין דרך פשוט לדעת מה מוצג בפועל בתוך התא הזה בדטה גריד ?פורסם במקור בפורום CODE613 ב20/01/2014 20:07 (+02:00)
-
הנה הקוד, טיפול בארוע העתקה מהדטה גריד:
Private Sub TEST_CopyingRowClipboardContent(sender As Object, e As System.Windows.Controls.DataGridRowClipboardEventArgs) If e.IsColumnHeadersRow Then Dim List As New List(Of DataGridClipboardCellContent) For Each Content In e.ClipboardRowContent List.Add(New DataGridClipboardCellContent(Content.Item, Content.Column, DirectCast(Content.Content, StackPanel).DataContext)) Next e.ClipboardRowContent.Clear() e.ClipboardRowContent.AddRange(List) Else Dim List As New List(Of DataGridClipboardCellContent) For Each Content In e.ClipboardRowContent Select Case Content.Column.GetType Case GetType(DataGridComboBoxColumn) Dim Column = DirectCast(Content.Column, DataGridComboBoxColumn) Dim data = DirectCast(Column.ItemsSource, DataTable) ' איך מגיעים מכאן למה שכתוב בתוך התא ' ???? Case GetType(DataGridTemplateColumn) If Content.Item.Equals(CollectionView.NewItemPlaceholder) = False Then Dim Column = DirectCast(Content.Column, DataGridTemplateColumn) Dim Path = Column.SortMemberPath Dim dRow As DataRow = DirectCast(Content.Item, System.Data.DataRowView).Row Dim aDate As String = Content.Content If dRow(Path) IsNot DBNull.Value Then aDate = Format(dRow(Path), "d") End If List.Add(New DataGridClipboardCellContent(Content.Item, Content.Column, aDate)) End If Case GetType(DataGridTextColumn), GetType(DataGridCheckBoxColumn) List.Add(New DataGridClipboardCellContent(Content.Item, Content.Column, Content.Content)) End Select Next e.ClipboardRowContent.Clear() e.ClipboardRowContent.AddRange(List) End If End Sub
מה שקורה הוא שיש דטה גריד שמציג טבלת מכירות, בטבלה זו יש עמודה 'מזהה לקוח' שזה מפתח זר מטבלת לקוחות, עמודה זו היא מסוג DataGridComboBoxColumn הקומבו בעמודה זו מציג שם ושם משפחה של הלקוח וזה בעזרת טמפלט שיש בתוכו שני טקסטבלוקים עם בינדינג לשדות של השם ושם משפחה.
כעת בזמן העתקה בברירת מחדל מועתק ע ID של הלקוח במקום השם והשם משפחה שלו שמופיעים בתוך התא.פורסם במקור בפורום CODE613 ב21/01/2014 13:28 (+02:00)
-
תגיד אתה פותח על אותו נושא שתי אשכולות בפורום? כי זה נראה לי קשור באדיקות לשאלה עם הDataTemplate.
בכל אופן לו לא אתה זה שכתבת את הXAML ואינך יודע כלל מה נמצא בתצוגת הקומבו, זה עסק מסובך עד כאב ראש. אתה צריך לחפש אלמנט TextBlock בעץ הויזואלי (ויכולים להיות כמה), ולקחת את התוכן.
אבל עד כמה שאני מתרשם אתה לא עובד בחברת ענק בו יד אחת לא יודעת מה עשתה חברתה, אז... השאלה לא מובנת לי.פורסם במקור בפורום CODE613 ב21/01/2014 14:26 (+02:00)
-
-
@דוד ל.ט.
בכל אופן לו לא אתה זה שכתבת את הXAML ואינך יודע כלל מה נמצא בתצוגת הקומבו, זה עסק מסובך עד כאב ראש. אתה צריך לחפש אלמנט TextBlock בעץ הויזואלי (ויכולים להיות כמה), ולקחת את התוכן.
אבל עד כמה שאני מתרשם אתה לא עובד בחברת ענק בו יד אחת לא יודעת מה עשתה חברתה, אז... השאלה לא מובנת לי.העינין הוא שמדובר בדטה גריד גנארי שפעם אני מציג בו טבלה כזו ופעם אחרת, וכל פעם הטמפלט של העמודת קומבו משתנה, המשותף לכל הטמפלטים הוא שכולם זה סטאקפאנל עם שנים או יותר טקסט בלוקים שאמורים להציג שדות מטבלה מקושרת על פי מפתח זר שבטבלה זו. ולכן אני מחפש דרך להגיע לשמות המאפיינים|שדות האלו.
תודה רבה!פורסם במקור בפורום CODE613 ב21/01/2014 15:25 (+02:00)