如何阻止Telerik ASP.NET MVC UI StockChart自动添加非数据源日期?
问题
我使用Telerik ASP.NET MVC UI的标准StockChart,功能正常,但图表会自动生成数据源中不存在的日期以维持刻度间隔。我已尝试所有分类参数并查阅Telerik官方文档,仍未找到解决方法,请问如何阻止该行为?
现有代码
@(Html.Kendo().StockChart<IATradeBLL.Model.TestResearchStockPriceHistory> (Model.TestResearchStockPriceHistories.Take(30)) .Name("stockChart") .Title(@Model.TestResearchStock.Ticker) .DataSource(dataSource => dataSource .ServerOperation(false)) .DateField("PriceDate") .SeriesColors(new string[] { "", "GREEN" }) .Series(series => { series.Candlestick(s => s.PriceOpen, s => s.PriceHigh, s => s.PriceLow, s => s.PriceClose, s => s.UpPrice, s => s.DownPrice); series.Line(s => s.EMANine); }) .Navigator(nav => nav .Series(series => { series.Bar(s => s.Volume); }) ) )
解决方法
Telerik StockChart默认会对日期轴进行连续插值生成额外日期,要禁用该行为,需给日期轴配置BaseUnitStep(BaseUnitStep.Fit),强制轴仅显示数据源中存在的日期。
修改后的完整代码
@(Html.Kendo().StockChart<IATradeBLL.Model.TestResearchStockPriceHistory> (Model.TestResearchStockPriceHistories.Take(30)) .Name("stockChart") .Title(@Model.TestResearchStock.Ticker) .DataSource(dataSource => dataSource .ServerOperation(false)) .DateField("PriceDate") // 添加分类轴配置,禁用自动生成日期 .CategoryAxis(axis => axis .BaseUnitStep(BaseUnitStep.Fit) // 自适应匹配现有数据点,不生成额外日期 .Labels(labels => labels.Rotation(-45)) // 可选:旋转标签避免重叠 ) .SeriesColors(new string[] { "", "GREEN" }) .Series(series => { series.Candlestick(s => s.PriceOpen, s => s.PriceHigh, s => s.PriceLow, s => s.PriceClose, s => s.UpPrice, s => s.DownPrice); series.Line(s => s.EMANine); }) .Navigator(nav => nav .Series(series => { series.Bar(s => s.Volume); }) ) )
进阶配置(可选)
若需完全确保每个数据点对应一个刻度,可添加MajorTicks配置:
.CategoryAxis(axis => axis .BaseUnitStep(BaseUnitStep.Fit) .MajorTicks(ticks => ticks.Step(1)) // 强制每个数据点显示一个刻度 .Labels(labels => labels.Rotation(-45)) )
原理说明
BaseUnitStep.Fit会让图表根据数据源中实际存在的日期间隔调整刻度,不再自动填充缺失的日期,从而仅展示数据源内的有效日期。
内容的提问来源于stack exchange,提问作者James Walls
相关产品推荐
相关产品推荐

