Radzen X轴格式化方法问题:动态日期范围X轴标签渲染异常
时间范围X轴标签格式化问题修复
需求说明
用户可通过下拉框选择指定日期范围标签(今日/昨日、本周/上周、本月/上月、本年/上年),动态渲染对应时间范围的销售数据,X轴标签需遵循以下规则:
- 今日/昨日:显示12小时制小时格式(如
12 am、3 pm) - 本周/上周:显示星期缩写(如
Sun、Mon) - 本月/上月:显示日期(如
1、31) - 本年/上年:显示月份缩写(如
Jan、Dec)
原代码问题分析
原FormatXAxis方法存在以下问题导致功能异常:
- 冗余的时间范围校验:已经通过
selectedDateRange确定了当前时间范围,无需再对传入的dateTime做范围判断,多余判断会导致符合条件的时间点返回空值。 - 星期范围覆盖不全:本周/上周的逻辑仅处理了周一至周四,遗漏了周五、周六、周日,这些日期会返回空字符串。
- 日期格式未适配需求细节:原代码中本月/上月使用
"dd"会返回带前导零的日期(如05),不符合需求中"1 - 30或1-31"的无前置零要求。
修复后的代码
public string FormatXAxis(object value) { DateTime dateTime = (DateTime)value; switch (selectedDateRange) { case "Today": case "Yesterday": // 12小时制格式,包含am/pm,如"12 am"、"3 pm" return dateTime.ToString("h tt", CultureInfo.InvariantCulture); case "Current Week": case "Last Week": // 返回星期缩写(Sun/Mon/Tue等) return dateTime.ToString("ddd", CultureInfo.InvariantCulture); case "Current Month": case "Last Month": // 返回无前置零的日期,符合需求中的"1 - 30"格式 return dateTime.ToString("d", CultureInfo.InvariantCulture); case "Current Year": case "Last Year": // 返回月份缩写(Jan/Feb等) return CultureInfo.InvariantCulture.DateTimeFormat.GetAbbreviatedMonthName(dateTime.Month); default: return string.Empty; } }
修复说明
- 改用
switch语句替代多个else if,代码结构更简洁易维护。 - 移除冗余的时间范围校验,直接根据选中的日期范围返回对应格式。
- 补全本周/上周的所有星期几处理逻辑,确保所有日期都能返回正确的星期缩写。
- 调整本月/上月的日期格式为
"d",返回无前置零的日期,匹配需求中的显示规则。
内容的提问来源于stack exchange,提问作者Logan Aaron
相关产品推荐
相关产品推荐

