Assuming "Date" is of type DateTime, I know it's possible to do the following:
I've replaced my DateTime property with a new custom class called MonthAndYear.
Now when I try to group by Date, I get an IndexOutOfRange exception that says "Cannot find column Date." If I remove the GridGroupByExpression, everything works just fine minus the fact that my data isn't grouped by Date. Is there a way to use custom objects in RadGrid's grouping functionality? Or at least a way to mimic grouping by DateTime?
<telerik:GridGroupByExpression> <SelectFields> <telerik:GridGroupByField FieldName="Date" /> </SelectFields> <GroupByFields> <telerik:GridGroupByField FieldName="Date" SortOrder="Ascending" /> </GroupByFields> </telerik:GridGroupByExpression>I've replaced my DateTime property with a new custom class called MonthAndYear.
[Serializable]protected class MonthAndYear : IComparable<MonthAndYear>{ public int Month { get; set; } public int Year { get; set; } public string monthString { get { return CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Month); } } public MonthAndYear(int month, int year) { Month = month; Year = year; } public MonthAndYear(DateTime dateTime) { Month = dateTime.Month; Year = dateTime.Year; } public static MonthAndYear Now { get { return new MonthAndYear(DateTime.Now.Month, DateTime.Now.Year); } } public static MonthAndYear FromDate(DateTime date) { return new MonthAndYear(date.Month, date.Year); } public MonthAndYear AddMonths(int num) { DateTime tempDate = new DateTime(Year, Month, 1); tempDate = tempDate.AddMonths(num); return new MonthAndYear(tempDate.Month, tempDate.Year); } public MonthAndYear AddYears(int num) { int newYear = Year + num; return new MonthAndYear(Month, newYear); } public static bool operator >(MonthAndYear a, MonthAndYear b) { if (a.Year == b.Year) return a.Month > b.Month; else if (a.Year > b.Year) return true; else return false; } public static bool operator <(MonthAndYear a, MonthAndYear b) { if (a.Year == b.Year) return a.Month < b.Month; else if (a.Year < b.Year) return true; else return false; } public static bool operator >=(MonthAndYear a, MonthAndYear b) { return a > b || a == b; } public static bool operator <=(MonthAndYear a, MonthAndYear b) { return a < b || a == b; } public static bool operator ==(MonthAndYear a, MonthAndYear b) { return a.Month == b.Month && a.Year == b.Year; } public static bool operator !=(MonthAndYear a, MonthAndYear b) { return !(a.Month == b.Month && a.Year == b.Year); } public override bool Equals(object obj) { if (obj == null) { return false; } MonthAndYear m = obj as MonthAndYear; if ((System.Object)m == null) { return false; } return this.Month == m.Month && this.Year == m.Year;; } public override string ToString() { return new DateTime(Year, Month, 1).ToString(); } public override int GetHashCode() { int hash = 23; hash = hash * 31 + Month.GetHashCode(); hash = hash * 31 + Year.GetHashCode(); return hash; } public int CompareTo(MonthAndYear other) { if (this < other) return -1; if (this == other) return 0; return 1; }}Now when I try to group by Date, I get an IndexOutOfRange exception that says "Cannot find column Date." If I remove the GridGroupByExpression, everything works just fine minus the fact that my data isn't grouped by Date. Is there a way to use custom objects in RadGrid's grouping functionality? Or at least a way to mimic grouping by DateTime?
