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

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

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

מיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי

מתוזמן נעוץ נעול הועבר תכנות
25 פוסטים 3 כותבים 449 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • M מנותק
    M מנותק
    mekev
    השיב לdovid ב נערך לאחרונה על ידי mekev
    #13

    @dovid

    1. אני שולף עם SqlCommand

    2. העמודה 'date' זה העמודה 'חודשושנה' בקוד האמיתי שלי
      אני כיום שולף מה SQL באפשרות ב' שכתבתי (הופך את התאריך לטקסט)
      ומבצע עליה בC# 'פיבוט' כדלעיל

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

      @mekev אוקי,
      אז קח את הקוד הזה

      select DATEFROMPARTS(year(date), month(date), 1) as 'date' ,s.product_name ,s.Barcode ,s.GGroup ,s.stock ,SUM (s.quantity) AS quantity
      from Sales s
      group by year(s.date),month(s.date) ,s.product_name ,s.Barcode ,s.GGroup ,s.stock
      

      בקוד שלך תשנה את זה:

      var uniqueAncType = dt.AsEnumerable().Select(x => x.Field<DateTime>("date")).Distinct().OrderBy(x => x).Select(x => x.ToString("MM/yyyy"));
      

      וגם את זה:

       newRow[ancType.Field<DateTime>("date").ToString("MM/yyyy")] = ancType.Field<double>("כמות מכירות");
      

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

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

      M תגובה 1 תגובה אחרונה
      1
      • M מנותק
        M מנותק
        mekev
        השיב לdovid ב נערך לאחרונה על ידי mekev
        #15

        @dovid כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:

        DATEFROMPARTS

        הפונקציה DATEFROMPARTS זמינה רק מגרסת 2012.....

        עריכה:

        החלפתי ב:

        dateadd(dd, 0, dateadd(mm, datediff(mm,0, date), 0)) as 'חודשושנה'
        

        מקור

        M תגובה 1 תגובה אחרונה
        1
        • M מנותק
          M מנותק
          mekev
          השיב לmekev ב נערך לאחרונה על ידי
          #16

          @mekev

          לא עובד...

          כאשר הוא מקבל את ההמרה ל: ToString("MM/yyyy") הוא ממיין כטקסט

          e55378da-28c3-4707-a84d-e9908dc94454-image.png

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

            @mekev המיון של העמודות נקבע עוד לפני ההמרה לToString, איפה שכתוב המילים OrderBy.
            לכן התוצאה שאתה מציג היא בהכרח שלא העתקת את הקוד כפי שהוא (בפרט השורה בה שמתי OrderBy), ואם אתה מכחיש תהיה חייב להציג לי כדי שהאמין לך...

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

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

            M תגובה 1 תגובה אחרונה
            0
            • M מנותק
              M מנותק
              mekev
              השיב לdovid ב נערך לאחרונה על ידי mekev
              #18

              @dovid
              6ed72cad-5064-4778-83ce-bf1544f553a5-image.png

              עריכה: כאשר אני עושה order by ישירות בSQL זה אכן מביא בצורה מממוינת
              במקביל גם כאשר אני משאיר את המיון בביצוע השאילתא דרך הC# זה מביא את התוצאה הנ"ל

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

                @mekev בא נשאל ככה, יש קוד נוסף חוץ מזה (כלומר חוץ ממה שמוצג בתמונה) שמנסה לסדר את העמודות?
                אגב גם אם הוא היה ממין כטקסט עדיין 01/2022 צריך לקדום ל01/2023. משהו פה משגע אותי.

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

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

                M תגובה 1 תגובה אחרונה
                0
                • M מנותק
                  M מנותק
                  mekev
                  השיב לdovid ב נערך לאחרונה על ידי mekev
                  #20

                  @dovid

                  @dovid כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:

                  יש קוד נוסף חוץ מזה (כלומר חוץ ממה שמוצג בתמונה) שמנסה לסדר את העמודות?

                  לא.

                  זה מה שמופיע בdt

                  4285c3af-8e9c-46de-bc2e-07c13d97d959-image.png

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

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

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

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

                    M תגובה 1 תגובה אחרונה
                    2
                    • dovidD מנותק
                      dovidD מנותק
                      dovid ניהול
                      השיב לmekev ב נערך לאחרונה על ידי
                      #22

                      למי שנפשו יוצאת לדעת את פתרון החידה אני מעדכן ש@mekev ברוב טובו יצר עימי קשר והראה לי את התעלומה הגדולה במוחש.
                      עקבנו אחרי הקוד, הDataTable אכן בסדר נכון, כל העמודות בסדר בו יצרו אותם (אלא מה?!) אבל הDataGridView שעם ההגדרה של AutoGenerateColumns מציג סדר משונה בו 01/2023 קודם ל01/2022.
                      אחרי הרבה זמן פתאום עלה הרעיון במוחו של @mekev שהבעיה מתרחשת תמיד רק בטעינה נוספת לDGV כלומר אחרי שכבר היה לו מקור אחר בעבר. מה שפתאום הבנו שיש מנגנון של מחזור עמודות קיימות, ושבמקרה כזה הם לא רק נחסכות מלהיווצר אלא הם גם שומרים על מיקומם... הגדרה של DataSource = null לפני הטעינה החדשה פותר את הבעיה!

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

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

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

                        קוד linqpad שממחיש את האבסורד (יש להקליק דבל קליק על הטבלה המוצגת כדי לטעון את זו שאחריה):

                        void Main()
                        {
                            var dt1 = new DataTable();
                            dt1.Columns.Add("B");
                            dt1.Columns.Add("C");
                            AddRow(dt1);
                        
                            var dt2 = new DataTable();
                            dt2.Columns.Add("A");
                            dt2.Columns.Add("B");
                            dt2.Columns.Add("C");
                            AddRow(dt2);
                        
                            var dgv = new DataGridView();
                            dgv.DataSource = dt1;
                            dgv.Dump();
                        
                            dgv.MouseDoubleClick += (s,e) => dgv.DataSource = dt2;
                        }
                        
                        void AddRow(DataTable dt)
                        {
                            var row = dt.NewRow();
                            row[0] = 123;
                            dt.Rows.Add(row);
                        }
                        

                        תוצאה:

                        c66d8eff-a333-41d6-9346-8dbd2dbc1928-image.png

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

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

                        תגובה 1 תגובה אחרונה
                        2
                        • M מנותק
                          M מנותק
                          mekev
                          השיב לdovid ב נערך לאחרונה על ידי mekev
                          #24

                          @dovid

                          ממש תודה ענקית על התמיכה באישי
                          (ועל ה...)

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

                          ולכן יש לאפס את מקור הנתונים לפני טעינה חוזרת

                          DataGridView1.DataSource = null
                          
                          dovidD תגובה 1 תגובה אחרונה
                          1
                          • dovidD מנותק
                            dovidD מנותק
                            dovid ניהול
                            השיב לmekev ב נערך לאחרונה על ידי
                            #25

                            @mekev לא שמת לב שכבר הקדמתי אותך.

                            אנחנו לא היחידים ששמנו לב לזה:
                            הבעיה ב2008:
                            https://www.pcreview.co.uk/threads/3551798/

                            פה מוזכר הפתרון
                            https://stackoverflow.com/a/38883973/1271037

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

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

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

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

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

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