מיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי
-
@mekev
באיזה שפה?@ivrtikshoret
1.אקסל
2.SQL SERVER (SSMS)
3. C# -
@ivrtikshoret
1.אקסל
2.SQL SERVER (SSMS)
3. C#@mekev כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
@ivrtikshoret
1.אקסל
2.SQL SERVER (SSMS)
3. C#לא הבנתי מה זה הרשימה.
בכל השלוש לא צריכים לעבור לטקסט, ואפשר להציג ישירות רק חודש ושנה.
מיון ותצוגה יכולים להיות נפרדים גם בכל השלושה.
תסביר איפה הבעיה. -
@mekev כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
@ivrtikshoret
1.אקסל
2.SQL SERVER (SSMS)
3. C#לא הבנתי מה זה הרשימה.
בכל השלוש לא צריכים לעבור לטקסט, ואפשר להציג ישירות רק חודש ושנה.
מיון ותצוגה יכולים להיות נפרדים גם בכל השלושה.
תסביר איפה הבעיה.@dovid כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
אפשר להציג ישירות רק חודש ושנה
איך ניתן להציג ישירות רק חודש ושנה?
ספציפית אני מושך את הנתון מSQL גרסת 2008
שלא ניתן לשלוף מראש את התוצאה בפורמט 'פיבוט' (זמין כמדומני מ2012)מקור הנתונים זה תוצאת שאילתת Group By
שמסכמת את סך המכירות לפי חודשובתוכנה (C#) אני מבצע פיבוט לפי המופיע כאן
-
@dovid כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
אפשר להציג ישירות רק חודש ושנה
איך ניתן להציג ישירות רק חודש ושנה?
ספציפית אני מושך את הנתון מSQL גרסת 2008
שלא ניתן לשלוף מראש את התוצאה בפורמט 'פיבוט' (זמין כמדומני מ2012)מקור הנתונים זה תוצאת שאילתת Group By
שמסכמת את סך המכירות לפי חודשובתוכנה (C#) אני מבצע פיבוט לפי המופיע כאן
-
@dovid כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
אפשר להציג ישירות רק חודש ושנה
איך ניתן להציג ישירות רק חודש ושנה?
ספציפית אני מושך את הנתון מSQL גרסת 2008
שלא ניתן לשלוף מראש את התוצאה בפורמט 'פיבוט' (זמין כמדומני מ2012)מקור הנתונים זה תוצאת שאילתת Group By
שמסכמת את סך המכירות לפי חודשובתוכנה (C#) אני מבצע פיבוט לפי המופיע כאן
@mekev כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
ובתוכנה (C#) אני מבצע פיבוט לפי המופיע כאן
בדוגמה הזו אין כ"כ תצוגה, כי מדובר בDataTable שזה מבנה נתונים.
שמה בשביל לקבץ לפי חודש ושנה צריך לעשות פשוט ככה:var groups = dt.AsEnumerable() .GroupBy(x => { var dateGroup = x.Field<DateTime>("OPR_DT"); return new { opr_dt = new DateTime(dateGroup.Year, dateGroup.Month, 1), opr_hr = x.Field<int>("OPR_HR"), anc_region = x.Field<string>("ANC_REGION"), run_id = x.Field<string>("MARKET_RUN_ID") }; }).ToList();
-
@mekev כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
ובתוכנה (C#) אני מבצע פיבוט לפי המופיע כאן
תביא את דוגמת הקוד שלך.
אתה ממלא במיוחד DataTable בשביל הPivot?@dovid כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
תביא את דוגמת הקוד שלך.
string[] uniqueAncType = dt.AsEnumerable().Select(x => x.Field<string>("חודשושנה")).Distinct().ToArray(); DataTable pivot = new DataTable(); pivot.Columns.Add("שם מוצר", typeof(string)); pivot.Columns.Add("ברקוד", typeof(string)); pivot.Columns.Add("קבוצה", typeof(string)); pivot.Columns.Add("מלאי נוכחי", typeof(double)); foreach (string col in uniqueAncType) { pivot.Columns.Add(col, typeof(string)); } var groups = dt.AsEnumerable() .GroupBy(x => new { anc_region = x.Field<string>("שם מוצר"), opr_hr = x.Field<string>("ברקוד"), anc_grop = x.Field<string>("קבוצה"), opr_hr1 = x.Field<double>("מלאי נוכחי"), }).ToList(); foreach (var group in groups) { DataRow newRow = pivot.Rows.Add(); newRow["שם מוצר"] = group.Key.anc_region; newRow["ברקוד"] = group.Key.opr_hr; newRow["מלאי נוכחי"] = group.Key.opr_hr1; newRow["קבוצה"] = group.Key.anc_grop; foreach (DataRow ancType in group) { newRow[ancType.Field<string>("חודשושנה")] = ancType.Field<double>("כמות מכירות"); } } dataGridView1.DataSource = pivot;
-
@dovid כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
תביא את דוגמת הקוד שלך.
string[] uniqueAncType = dt.AsEnumerable().Select(x => x.Field<string>("חודשושנה")).Distinct().ToArray(); DataTable pivot = new DataTable(); pivot.Columns.Add("שם מוצר", typeof(string)); pivot.Columns.Add("ברקוד", typeof(string)); pivot.Columns.Add("קבוצה", typeof(string)); pivot.Columns.Add("מלאי נוכחי", typeof(double)); foreach (string col in uniqueAncType) { pivot.Columns.Add(col, typeof(string)); } var groups = dt.AsEnumerable() .GroupBy(x => new { anc_region = x.Field<string>("שם מוצר"), opr_hr = x.Field<string>("ברקוד"), anc_grop = x.Field<string>("קבוצה"), opr_hr1 = x.Field<double>("מלאי נוכחי"), }).ToList(); foreach (var group in groups) { DataRow newRow = pivot.Rows.Add(); newRow["שם מוצר"] = group.Key.anc_region; newRow["ברקוד"] = group.Key.opr_hr; newRow["מלאי נוכחי"] = group.Key.opr_hr1; newRow["קבוצה"] = group.Key.anc_grop; foreach (DataRow ancType in group) { newRow[ancType.Field<string>("חודשושנה")] = ancType.Field<double>("כמות מכירות"); } } dataGridView1.DataSource = pivot;
-
@mekev הדוגמה שלך חסרה כי אין לי מושג איך נוצרת העמודה "חודשושנה" שנראה שהיא כבר איננה תאריך אלא טקסט.
-
@mekev הכי טוב שתביא לי את הSQL (אני מניח שאתה לא משתמש בEF, נכון?)
ותגדיר לי לפי מה הPivot הרצוי ואתן לך את הקוד המתאים לענ"ד.CREATE TABLE Sales ([date] datetime, [Barcode] int, [product_name] varchar(50),[GGroup] varchar(50),[stock] int, [quantity] int) ; INSERT INTO Sales ([date] , [Barcode] , [product_name] ,[GGroup],[stock] , [quantity] ) VALUES ('2022-01-01 12:00:00', 2885, 'Cookware','microwave',25,1), ('2022-01-06 13:00:00', 2885, 'Cookware','microwave',25,2), ('2022-02-01 14:00:00', 2885, 'Cookware','microwave',25,3), ('2022-02-05 15:00:00', 2885, 'Cookware','microwave',25,4), ('2022-03-05 16:00:00', 2885, 'Cookware','microwave',25,5), ('2022-03-06 17:00:00', 2885, 'Cookware','microwave',25,6), ('2022-04-07 18:00:00', 2885, 'Cookware','microwave',25,7), ('2022-04-08 19:00:00', 2885, 'Cookware','microwave',25,8), ('2022-05-09 20:00:00', 2885, 'Cookware','microwave',25,9), ('2022-05-10 21:00:00', 2885, 'Cookware','microwave',25,10), ('2022-06-11 22:00:00', 2885, 'Cookware','microwave',25,11), ('2022-06-12 23:00:00', 2885, 'Cookware','microwave',25,12), ('2022-07-13 11:00:00', 2885, 'Cookware','microwave',25,13), ('2022-07-14 10:00:00', 2885, 'Cookware','microwave',25,14), ('2022-01-01 12:00:00', 3665, 'Appliances','refrigerator',12,15), ('2022-01-06 13:00:00', 3665, 'Appliances','refrigerator',12,16), ('2022-02-01 14:00:00', 3665, 'Appliances','refrigerator',12,17), ('2022-02-05 15:00:00', 3665, 'Appliances','refrigerator',12,18), ('2022-03-05 16:00:00', 3665, 'Appliances','refrigerator',12,19), ('2022-03-06 17:00:00', 3665, 'Appliances','refrigerator',12,20), ('2022-04-07 18:00:00', 3665, 'Appliances','refrigerator',12,21), ('2022-04-08 19:00:00', 3665, 'Appliances','refrigerator',12,22), ('2022-05-09 20:00:00', 3665, 'Appliances','refrigerator',12,23), ('2022-05-10 21:00:00', 3665, 'Appliances','refrigerator',12,24), ('2022-06-11 22:00:00', 3665, 'Appliances','refrigerator',12,25), ('2022-06-12 23:00:00', 3665, 'Appliances','refrigerator',12,26), ('2022-07-13 11:00:00', 3665, 'Appliances','refrigerator',12,27), ('2022-07-14 10:00:00', 3665, 'Appliances','refrigerator',12,28), ('2022-01-01 12:00:00', 2885, 'Cookware','microwave',25,1), ('2022-01-06 13:00:00', 2885, 'Cookware','microwave',25,2), ('2022-02-01 14:00:00', 2885, 'Cookware','microwave',25,3), ('2022-02-05 15:00:00', 2885, 'Cookware','microwave',25,4), ('2022-03-05 16:00:00', 2885, 'Cookware','microwave',25,5), ('2022-03-06 17:00:00', 2885, 'Cookware','microwave',25,6), ('2022-04-07 18:00:00', 2885, 'Cookware','microwave',25,7), ('2022-04-08 19:00:00', 2885, 'Cookware','microwave',25,8), ('2022-05-09 20:00:00', 2885, 'Cookware','microwave',25,9), ('2022-05-10 21:00:00', 2885, 'Cookware','microwave',25,10), ('2022-06-11 22:00:00', 2885, 'Cookware','microwave',25,11), ('2022-06-12 23:00:00', 2885, 'Cookware','microwave',25,12), ('2022-07-13 11:00:00', 2885, 'Cookware','microwave',25,13), ('2022-07-14 10:00:00', 2885, 'Cookware','microwave',25,14), ('2023-01-01 12:00:00', 3665, 'Appliances','refrigerator',12,15), ('2023-01-06 13:00:00', 3665, 'Appliances','refrigerator',12,16), ('2023-02-01 14:00:00', 3665, 'Appliances','refrigerator',12,17), ('2023-02-05 15:00:00', 3665, 'Appliances','refrigerator',12,18), ('2023-03-05 16:00:00', 3665, 'Appliances','refrigerator',12,19), ('2023-03-06 17:00:00', 3665, 'Appliances','refrigerator',12,20), ('2023-04-07 18:00:00', 3665, 'Appliances','refrigerator',12,21), ('2023-04-08 19:00:00', 3665, 'Appliances','refrigerator',12,22), ('2023-05-09 20:00:00', 3665, 'Appliances','refrigerator',12,23), ('2023-05-10 21:00:00', 3665, 'Appliances','refrigerator',12,24), ('2023-06-11 22:00:00', 3665, 'Appliances','refrigerator',12,25), ('2023-06-12 23:00:00', 3665, 'Appliances','refrigerator',12,26), ('2023-07-13 11:00:00', 3665, 'Appliances','refrigerator',12,27), ('2023-07-14 10:00:00', 3665, 'Appliances','refrigerator',12,28) ;
אפשרות א:
select year (s.date) as year ,month (s.date) as month ,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
אפשרות ב:
select CONVERT( nvarchar,month(date)) + '/' +CONVERT( nvarchar, year(date)) 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
התוצאה הרצויה:
(נ.ב. לא מצאתי עורך קוד אונליין להעלות דרכו את הדוגמא
sqlfiddle לא תומך בחלק מהפונקציות) -
CREATE TABLE Sales ([date] datetime, [Barcode] int, [product_name] varchar(50),[GGroup] varchar(50),[stock] int, [quantity] int) ; INSERT INTO Sales ([date] , [Barcode] , [product_name] ,[GGroup],[stock] , [quantity] ) VALUES ('2022-01-01 12:00:00', 2885, 'Cookware','microwave',25,1), ('2022-01-06 13:00:00', 2885, 'Cookware','microwave',25,2), ('2022-02-01 14:00:00', 2885, 'Cookware','microwave',25,3), ('2022-02-05 15:00:00', 2885, 'Cookware','microwave',25,4), ('2022-03-05 16:00:00', 2885, 'Cookware','microwave',25,5), ('2022-03-06 17:00:00', 2885, 'Cookware','microwave',25,6), ('2022-04-07 18:00:00', 2885, 'Cookware','microwave',25,7), ('2022-04-08 19:00:00', 2885, 'Cookware','microwave',25,8), ('2022-05-09 20:00:00', 2885, 'Cookware','microwave',25,9), ('2022-05-10 21:00:00', 2885, 'Cookware','microwave',25,10), ('2022-06-11 22:00:00', 2885, 'Cookware','microwave',25,11), ('2022-06-12 23:00:00', 2885, 'Cookware','microwave',25,12), ('2022-07-13 11:00:00', 2885, 'Cookware','microwave',25,13), ('2022-07-14 10:00:00', 2885, 'Cookware','microwave',25,14), ('2022-01-01 12:00:00', 3665, 'Appliances','refrigerator',12,15), ('2022-01-06 13:00:00', 3665, 'Appliances','refrigerator',12,16), ('2022-02-01 14:00:00', 3665, 'Appliances','refrigerator',12,17), ('2022-02-05 15:00:00', 3665, 'Appliances','refrigerator',12,18), ('2022-03-05 16:00:00', 3665, 'Appliances','refrigerator',12,19), ('2022-03-06 17:00:00', 3665, 'Appliances','refrigerator',12,20), ('2022-04-07 18:00:00', 3665, 'Appliances','refrigerator',12,21), ('2022-04-08 19:00:00', 3665, 'Appliances','refrigerator',12,22), ('2022-05-09 20:00:00', 3665, 'Appliances','refrigerator',12,23), ('2022-05-10 21:00:00', 3665, 'Appliances','refrigerator',12,24), ('2022-06-11 22:00:00', 3665, 'Appliances','refrigerator',12,25), ('2022-06-12 23:00:00', 3665, 'Appliances','refrigerator',12,26), ('2022-07-13 11:00:00', 3665, 'Appliances','refrigerator',12,27), ('2022-07-14 10:00:00', 3665, 'Appliances','refrigerator',12,28), ('2022-01-01 12:00:00', 2885, 'Cookware','microwave',25,1), ('2022-01-06 13:00:00', 2885, 'Cookware','microwave',25,2), ('2022-02-01 14:00:00', 2885, 'Cookware','microwave',25,3), ('2022-02-05 15:00:00', 2885, 'Cookware','microwave',25,4), ('2022-03-05 16:00:00', 2885, 'Cookware','microwave',25,5), ('2022-03-06 17:00:00', 2885, 'Cookware','microwave',25,6), ('2022-04-07 18:00:00', 2885, 'Cookware','microwave',25,7), ('2022-04-08 19:00:00', 2885, 'Cookware','microwave',25,8), ('2022-05-09 20:00:00', 2885, 'Cookware','microwave',25,9), ('2022-05-10 21:00:00', 2885, 'Cookware','microwave',25,10), ('2022-06-11 22:00:00', 2885, 'Cookware','microwave',25,11), ('2022-06-12 23:00:00', 2885, 'Cookware','microwave',25,12), ('2022-07-13 11:00:00', 2885, 'Cookware','microwave',25,13), ('2022-07-14 10:00:00', 2885, 'Cookware','microwave',25,14), ('2023-01-01 12:00:00', 3665, 'Appliances','refrigerator',12,15), ('2023-01-06 13:00:00', 3665, 'Appliances','refrigerator',12,16), ('2023-02-01 14:00:00', 3665, 'Appliances','refrigerator',12,17), ('2023-02-05 15:00:00', 3665, 'Appliances','refrigerator',12,18), ('2023-03-05 16:00:00', 3665, 'Appliances','refrigerator',12,19), ('2023-03-06 17:00:00', 3665, 'Appliances','refrigerator',12,20), ('2023-04-07 18:00:00', 3665, 'Appliances','refrigerator',12,21), ('2023-04-08 19:00:00', 3665, 'Appliances','refrigerator',12,22), ('2023-05-09 20:00:00', 3665, 'Appliances','refrigerator',12,23), ('2023-05-10 21:00:00', 3665, 'Appliances','refrigerator',12,24), ('2023-06-11 22:00:00', 3665, 'Appliances','refrigerator',12,25), ('2023-06-12 23:00:00', 3665, 'Appliances','refrigerator',12,26), ('2023-07-13 11:00:00', 3665, 'Appliances','refrigerator',12,27), ('2023-07-14 10:00:00', 3665, 'Appliances','refrigerator',12,28) ;
אפשרות א:
select year (s.date) as year ,month (s.date) as month ,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
אפשרות ב:
select CONVERT( nvarchar,month(date)) + '/' +CONVERT( nvarchar, year(date)) 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
התוצאה הרצויה:
(נ.ב. לא מצאתי עורך קוד אונליין להעלות דרכו את הדוגמא
sqlfiddle לא תומך בחלק מהפונקציות)@mekev יאהוו ממש השקעת, כל הכבוד.
אני התכוונתי שתביא לי את הSELECT שאיתו אתה שולף מהSQL בC# (אתה עובד עם DataSet.Fill?).
בכל אופן בדוגמאות שלך, אתה פשוט מצרף עמודה שמכילה את התאריך כתאריך:
אפשרות א'select MIN(s.date) as FullDate, year (s.date) as year ,month (s.date) as month ,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
אפשרות ב' לא טובה. אם כבר ליצור מזה תאריך חדש של יום האחד בחודש תמיד:
select DATEFROMPARTS(year(date), month(date), 1) ,s.product_name ,s.Barcode ,s.GGroup ,s.stock ,SUM (s.quantity) AS quantity from Sales s group by DATEFROMPARTS(year(date), month(date), 1) ,s.product_name ,s.Barcode ,s.GGroup ,s.stock
אבל אני לא מבין איך כל זה יעזור לך לC#, ץתביא את הSQL שאיתו אתה שולף לDATATBLE עם החודשושנה.
-
@mekev יאהוו ממש השקעת, כל הכבוד.
אני התכוונתי שתביא לי את הSELECT שאיתו אתה שולף מהSQL בC# (אתה עובד עם DataSet.Fill?).
בכל אופן בדוגמאות שלך, אתה פשוט מצרף עמודה שמכילה את התאריך כתאריך:
אפשרות א'select MIN(s.date) as FullDate, year (s.date) as year ,month (s.date) as month ,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
אפשרות ב' לא טובה. אם כבר ליצור מזה תאריך חדש של יום האחד בחודש תמיד:
select DATEFROMPARTS(year(date), month(date), 1) ,s.product_name ,s.Barcode ,s.GGroup ,s.stock ,SUM (s.quantity) AS quantity from Sales s group by DATEFROMPARTS(year(date), month(date), 1) ,s.product_name ,s.Barcode ,s.GGroup ,s.stock
אבל אני לא מבין איך כל זה יעזור לך לC#, ץתביא את הSQL שאיתו אתה שולף לDATATBLE עם החודשושנה.
-
-
אני שולף עם SqlCommand
-
העמודה 'date' זה העמודה 'חודשושנה' בקוד האמיתי שלי
אני כיום שולף מה SQL באפשרות ב' שכתבתי (הופך את התאריך לטקסט)
ומבצע עליה בC# 'פיבוט' כדלעיל
@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>("כמות מכירות");
-
-
@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 כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
DATEFROMPARTS
הפונקציה DATEFROMPARTS זמינה רק מגרסת 2012.....
עריכה:
החלפתי ב:
dateadd(dd, 0, dateadd(mm, datediff(mm,0, date), 0)) as 'חודשושנה'
-
@mekev המיון של העמודות נקבע עוד לפני ההמרה לToString, איפה שכתוב המילים OrderBy.
לכן התוצאה שאתה מציג היא בהכרח שלא העתקת את הקוד כפי שהוא (בפרט השורה בה שמתי OrderBy), ואם אתה מכחיש תהיה חייב להציג לי כדי שהאמין לך... -
עריכה: כאשר אני עושה order by ישירות בSQL זה אכן מביא בצורה מממוינת
במקביל גם כאשר אני משאיר את המיון בביצוע השאילתא דרך הC# זה מביא את התוצאה הנ"ל -
@mekev בא נשאל ככה, יש קוד נוסף חוץ מזה (כלומר חוץ ממה שמוצג בתמונה) שמנסה לסדר את העמודות?
אגב גם אם הוא היה ממין כטקסט עדיין 01/2022 צריך לקדום ל01/2023. משהו פה משגע אותי. -
@dovid כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
יש קוד נוסף חוץ מזה (כלומר חוץ ממה שמוצג בתמונה) שמנסה לסדר את העמודות?
לא.
זה מה שמופיע בdt
-
@dovid כתב במיון תאריכים המוצגים כחודש ושנה בסדר כרונולוגי:
יש קוד נוסף חוץ מזה (כלומר חוץ ממה שמוצג בתמונה) שמנסה לסדר את העמודות?
לא.
זה מה שמופיע בdt
למי שנפשו יוצאת לדעת את פתרון החידה אני מעדכן ש@mekev ברוב טובו יצר עימי קשר והראה לי את התעלומה הגדולה במוחש.
עקבנו אחרי הקוד, הDataTable אכן בסדר נכון, כל העמודות בסדר בו יצרו אותם (אלא מה?!) אבל הDataGridView שעם ההגדרה של AutoGenerateColumns מציג סדר משונה בו 01/2023 קודם ל01/2022.
אחרי הרבה זמן פתאום עלה הרעיון במוחו של @mekev שהבעיה מתרחשת תמיד רק בטעינה נוספת לDGV כלומר אחרי שכבר היה לו מקור אחר בעבר. מה שפתאום הבנו שיש מנגנון של מחזור עמודות קיימות, ושבמקרה כזה הם לא רק נחסכות מלהיווצר אלא הם גם שומרים על מיקומם... הגדרה של DataSource = null לפני הטעינה החדשה פותר את הבעיה!