דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. WPF העתקת טבלה מדטה-גריד

WPF העתקת טבלה מדטה-גריד

מתוזמן נעוץ נעול הועבר ארכיון code613m
9 פוסטים 2 כותבים 484 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים מורחק
    כתב ב נערך לאחרונה על ידי
    #1

    כאשר אני בוחר את כל הדטה-גריד ע''י לחיצה על הלחצן שבפינה למעלה ולוחץ על קונטול+C הוא מעתיק לי את כל התוכן של הטבלה ואני יכול להדביק את הכל בוורד כטבלה ממש.
    רק הבעיה היא עם החלקים הבאים:

    1. שורת הכותרת לא מועתקת
    2. אם זו עמודה עם בורר תאריך לא מועתק התאריך
    3. אם זו עמודה מקושרת מועתק המספר של ה ID ולא הערך שאליו מפנה הID אף שהוא מופיע בתוך התאים של הדטה גריד.

    מה הצעותכים בנידון?
    תודה לכולם.

    פורסם במקור בפורום CODE613 ב19/01/2014 23:16 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      קודם בדוק את המאפיין ClipboardCopyMode.
      בשביל התאמות יותר מדוייקות תצטרך לטפל באירוע העתקה של הGrid כולו או של תא.
      אני אף פעם לא התעסקתי עם זה, תנסה לחפש בנושא.
      כמו"כ אתה יכול בפשטות לבנות את התוכן לבד, זה לא קשה מידי, תבדוק מה הוא עושה ותחקה אותו.

      פורסם במקור בפורום CODE613 ב20/01/2014 12:19 (+02:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      1
      • רחמיםר מנותק
        רחמיםר מנותק
        רחמים מורחק
        כתב ב נערך לאחרונה על ידי
        #3

        הגדרתי את Me.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader
        ובאמת הראשי העמודות הועתקו אבל הטקסט היה System.Windows.Controls.StackPanel :lol:

        כנראה כמו שאמרת צריך לעבוד מול ה DATATABLE על פי הבחירה בדטה גריד.

        פורסם במקור בפורום CODE613 ב20/01/2014 13:44 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • רחמיםר מנותק
          רחמיםר מנותק
          רחמים מורחק
          כתב ב נערך לאחרונה על ידי
          #4

          כל סוגי העמודות הצלחתי לעשות חוץ מ DataGridComboBoxColumn אם יש לעמודה הזו DisplayMemberPath אז לא בעיה להשיג את המחרוזת המוצגת, אבל אם אין כזה מאפיין כיון שהשתמשו ב ElementStyle ובתוך הסטייל יש כל מיני פקדים לא ידועים שיש להם כל מיני בינדינגים לאיזה מאפיינים שבטבלת האב אז אני כבר לא יודע איך לגשת לשם ולדעת באילו מאפיינים מדובר.
          השאלה אם אין דרך פשוט לדעת מה מוצג בפועל בתוך התא הזה בדטה גריד ?

          פורסם במקור בפורום CODE613 ב20/01/2014 20:07 (+02:00)

          תגובה 1 תגובה אחרונה
          0
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #5

            לא הבנתי כלום.
            לא כ"כ הבנתי איך עשית ולא כ"כ הבנתי מה הבעיה לגשת למה שמוצג בקומבו כאשר מי שקבע מה יוצג שם זה אתה בעצמך.

            אם תראה את הקוד של העתקה אני אבין אולי יותר טוב.

            פורסם במקור בפורום CODE613 ב21/01/2014 11:29 (+02:00)

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            0
            • רחמיםר מנותק
              רחמיםר מנותק
              רחמים מורחק
              כתב ב נערך לאחרונה על ידי
              #6

              הנה הקוד, טיפול בארוע העתקה מהדטה גריד:

              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)

              תגובה 1 תגובה אחרונה
              0
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                כתב ב נערך לאחרונה על ידי
                #7

                תגיד אתה פותח על אותו נושא שתי אשכולות בפורום? כי זה נראה לי קשור באדיקות לשאלה עם הDataTemplate.
                בכל אופן לו לא אתה זה שכתבת את הXAML ואינך יודע כלל מה נמצא בתצוגת הקומבו, זה עסק מסובך עד כאב ראש. אתה צריך לחפש אלמנט TextBlock בעץ הויזואלי (ויכולים להיות כמה), ולקחת את התוכן.
                אבל עד כמה שאני מתרשם אתה לא עובד בחברת ענק בו יד אחת לא יודעת מה עשתה חברתה, אז... השאלה לא מובנת לי.

                פורסם במקור בפורום CODE613 ב21/01/2014 14:26 (+02:00)

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                תגובה 1 תגובה אחרונה
                0
                • רחמיםר מנותק
                  רחמיםר מנותק
                  רחמים מורחק
                  כתב ב נערך לאחרונה על ידי
                  #8

                  @דוד ל.ט.

                  תגיד אתה פותח על אותו נושא שתי אשכולות בפורום?

                  אשכול זה פתחתי כדי לדעת איך להעתיק, אשכול ההוא פתחתי כדי לדעת איך בודקים את תוכן הדטה טמפלט
                  אבל הרחת נכון אצלי הצורך בשניהם בא מאותו מקום. 😉

                  פורסם במקור בפורום CODE613 ב21/01/2014 14:30 (+02:00)

                  תגובה 1 תגובה אחרונה
                  0
                  • רחמיםר מנותק
                    רחמיםר מנותק
                    רחמים מורחק
                    כתב ב נערך לאחרונה על ידי
                    #9

                    @דוד ל.ט.

                    בכל אופן לו לא אתה זה שכתבת את הXAML ואינך יודע כלל מה נמצא בתצוגת הקומבו, זה עסק מסובך עד כאב ראש. אתה צריך לחפש אלמנט TextBlock בעץ הויזואלי (ויכולים להיות כמה), ולקחת את התוכן.
                    אבל עד כמה שאני מתרשם אתה לא עובד בחברת ענק בו יד אחת לא יודעת מה עשתה חברתה, אז... השאלה לא מובנת לי.

                    העינין הוא שמדובר בדטה גריד גנארי שפעם אני מציג בו טבלה כזו ופעם אחרת, וכל פעם הטמפלט של העמודת קומבו משתנה, המשותף לכל הטמפלטים הוא שכולם זה סטאקפאנל עם שנים או יותר טקסט בלוקים שאמורים להציג שדות מטבלה מקושרת על פי מפתח זר שבטבלה זו. ולכן אני מחפש דרך להגיע לשמות המאפיינים|שדות האלו.
                    תודה רבה!

                    פורסם במקור בפורום CODE613 ב21/01/2014 15:25 (+02:00)

                    תגובה 1 תגובה אחרונה
                    0

                    בא תתחבר לדף היומי!
                    • התחברות

                    • אין לך חשבון עדיין? הרשמה

                    • התחברו או הירשמו כדי לחפש.
                    • פוסט ראשון
                      פוסט אחרון
                    0
                    • דף הבית
                    • קטגוריות
                    • פוסטים אחרונים
                    • משתמשים
                    • חיפוש
                    • חוקי הפורום