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

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

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

WPF לחצן שונה בראש שורה האחרונה בדטה-גריד

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

    אני מוסיף לחצן בכל ראש שורה בדטה-גריד כמתואר באשכול הזה או הזה.

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

    תודה לכולם.

    פורסם במקור בפורום CODE613 ב26/12/2013 17:46 (+02:00)

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

      בד"כ אתה מעדיף קוד, אז אם יש לך DataGridRow מסויימת ביד (למשל באירוע לואדינג כמו שעשית בעבר) והיא נקראת dr תוכל לבדוק ככה:

      If dr.Item = CollectionView.NewItemPlaceholder Then
          dr.HeaderTemplate = XXX
      End If
      

      פורסם במקור בפורום CODE613 ב26/12/2013 18:48 (+02:00)

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

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

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

        תודה רבה,
        עשיתי כעצתך כך:

        Private Sub RowHeadBtn_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs)
                Dim btn As Button = DirectCast(e.Source, Button)
                Dim DC = DirectCast(DirectCast(btn.TemplatedParent, ContentPresenter).Parent, StackPanel).DataContext
                If DC Is CollectionView.NewItemPlaceholder Then
                    btn.Content = "*"
                End If
            End Sub
        

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

        שאלה.png

        פורסם במקור בפורום CODE613 ב26/12/2013 19:32 (+02:00)

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

          אתה שואל גם למה, או רק שואל איך לפתור זאת?
          אגב אני תמה למה במקומו הוא (בפרטי איש קשר) הוא השתנה אחרי שהוספת.

          פורסם במקור בפורום CODE613 ב26/12/2013 19:44 (+02:00)

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

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

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

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

            אגב אני תמה למה במקומו הוא (בפרטי איש קשר) הוא השתנה אחרי שהוספת.

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

            פורסם במקור בפורום CODE613 ב26/12/2013 19:54 (+02:00)

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

              @רחמים

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

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

              האירוע הזה קופץ כשהכפתור נוצר. זהו.
              אתה יכול להסביר לי למה הוא נוצר אחרי שאתה ממלא שורה חדשה? הוא כבר היה שם לפני כן!
              רק השורה הנוספת שנוצרת אח"כ מקפיצה אירוע לכפתורה המשוייך לה.

              פורסם במקור בפורום CODE613 ב26/12/2013 20:06 (+02:00)

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

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

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

                אני חושב שכאשר אתה ממלא שורה חדשה אז השורה עם הכפתור עם הכוכבית קופץ קדימה, ואתה למעשה ממלא שורה שנוצרה באותו רגע, זה נדמה כאילו אתה מלאת את השורה האחרונה אבל למעשה השורה האחרונה קפצה לסוף ואתה מלאת שורה שנוצרה ברגע זה ממש ולכן גם הלחצן שלה יש לו '+' ולא כוכבית.

                אין איזה טריגר לזה

                פורסם במקור בפורום CODE613 ב26/12/2013 20:49 (+02:00)

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

                  @רחמים

                  אני חושב שכאשר אתה ממלא שורה חדשה אז השורה עם הכפתור עם הכוכבית קופץ קדימה, ואתה למעשה ממלא שורה שנוצרה באותו רגע, זה נדמה כאילו אתה מלאת את השורה האחרונה אבל למעשה השורה האחרונה קפצה לסוף ואתה מלאת שורה שנוצרה ברגע זה ממש ולכן גם הלחצן שלה יש לו '+' ולא כוכבית.

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

                  @רחמים

                  אין איזה טריגר לזה

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

                  פורסם במקור בפורום CODE613 ב26/12/2013 21:13 (+02:00)

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

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

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

                    @דוד ל.ט.

                    למה טריגר, אתה הולך עם קוד. ואם טריגר, אז עד הסוף, לא חצי קוד וחצי טריגר.

                    אפשר לכותב טריגר גם בתוך הקוד, שכל כל XAML אפשר לתרגם לקוד.

                    @דוד ל.ט.

                    שמתי באירוע טעינה שישנה את הכיתוב לזמן דקות+שניות.

                    שמת בטעינה של הלחצן? או בטעינה של ה RowDetails ?

                    פורסם במקור בפורום CODE613 ב26/12/2013 21:42 (+02:00)

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

                      @רחמים

                      @דוד ל.ט.
                      למה טריגר, אתה הולך עם קוד. ואם טריגר, אז עד הסוף, לא חצי קוד וחצי טריגר.

                      אפשר לכותב טריגר גם בתוך הקוד, שכל כל XAML אפשר לתרגם לקוד.

                      מקוה שהבנת אותי אף על פי כן.

                      @רחמים

                      @דוד ל.ט.
                      שמתי באירוע טעינה שישנה את הכיתוב לזמן דקות+שניות.

                      שמת בטעינה של הלחצן? או בטעינה של ה RowDetails ?

                      אכן בטעינת לחצן.

                      פורסם במקור בפורום CODE613 ב26/12/2013 22:09 (+02:00)

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

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

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

                        @דוד ל.ט.

                        אז האירוע שלך צריך להיות שורה חדשה/מס' שורות השתנה וכדומה.

                        איך נקרא ארוע כזה בדטה-גריד? מה שאני יודע על הוספת שורות זה ארוע CollectionChanged עבור ObservableCollection אבל ארוע זה קופץ מיד איך שהאוסף משתנה עוד לפני שהדטה-גריד מוסיף שורה.

                        פורסם במקור בפורום CODE613 ב27/12/2013 08:49 (+02:00)

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

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

                          Private Sub dg_LoadingRow(sender As Object, e As DataGridRowEventArgs)
                              If e.Row.Item.Equals(CollectionView.NewItemPlaceholder) Then
                                  e.Row.Header = "*"
                              Else
                                  e.Row.Header = "+"
                              End If
                          End Sub
                          

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

                          פורסם במקור בפורום CODE613 ב31/12/2013 21:10 (+02:00)

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

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

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

                            תודה רבה זה ממש טוב!!

                            פורסם במקור בפורום CODE613 ב31/12/2013 22:02 (+02:00)

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

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

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

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