ASP.NET图表控件 - 如何自动绘制空图表区域?

4

我想用空系列绘制我的图表可能看起来很奇怪。

但是问题在于,我的图表正在绘制从数据库中提供给存储过程的两个日期之间的数据。

结果可能是这样的:

2011-08-05 - 37,5
2011-08-11 - 20,1
2011-08-16 - 8,0
2011-08-17 - 15,7

横轴绘制日期,纵轴绘制数字(小数)。

这个没有问题。

但是我想要像这样:

2011-08-01 - 0
2011-08-02 - 0
^
etc.
v
2011-08-05 - 37,5
2011-08-06 - 20,1
2011-08-07 - 8,0
2011-08-08 - 15,7
^
etc.
v
2011-08-30 - 0
2011-08-31 - 0

有人能给我一个提示吗?

我的代码看起来像这样:

        <asp:Chart ID="Chart_NormalRegistrations" runat="server" Height="650px" Width="975px" 
            DataSourceID="SqlDataSource1" Palette="Bright">
            <Series>
                <asp:Series Name="Series1" XValueMember="Dato" XValueType="DateTime" ChartArea="" 
                    YValueMembers="Total" YValueType="Double" YValuesPerPoint="1">
                </asp:Series>
            </Series>
            <ChartAreas>
                <asp:ChartArea Name="ChartArea1">
                    <AxisY Title="Tid" Interval="5">
                    </AxisY>
                    <AxisX Title="Dage" Interval="1">
                    </AxisX>
                    <Area3DStyle Enable3D="True" />
                </asp:ChartArea>
            </ChartAreas>
        </asp:Chart>

        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString=" //connectionstring" 
            SelectCommand="stored_proc_regs" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:Parameter DefaultValue="2011-08-01" Name="from" Type="DateTime" />
                <asp:Parameter DefaultValue="2011-09-01" Name="to" Type="DateTime" />
            </SelectParameters>
        </asp:SqlDataSource>

进一步澄清,这意味着我想要一个预先绘制的X轴,日期范围从指定月份的第一天到最后一天。然而,它仍应在具有数据的日期上绘制数据到X轴上 ;) - KristianB
2个回答

1

另一种解决方法是向图表中插入空点。您需要使用DataManipulator类。不过,仍然需要设置x轴的最大最小值。

Chart_NormalRegistration.Series["Series1"]["EmptyPointValue"] = 0;

Chart_NormalRegistration.DataManipulator.InsertEmptyPoints(1, IntervalType.Days, 
            1, IntervalType.Days, "Series1");

1
<AxisX Title="Dage" Interval="1">

在这个标签中,您可以为轴设置显式的最小值最大值,图表将遵守它们。但是确定要设置什么可能有点棘手。
假设您的存储过程返回DateTime(或SQL等效项),则图表将使用OLE自动化转换将其有效地转换为double,该转换几乎是从1899年12月30日午夜后的天数。如果您只是使用标记(看起来是这样),则必须手动计算所需日期的这些数字并提供这些数字,因为我认为图表标记不会为您转换。

2011-08-01 的 OADate 是 40756,如果要增加一天,只需加上 1,因此 31 日是 40786。试试看是否有效 - 如果有效,您可以考虑是否想要通过开始在代码后台中进行一些工作来更轻松地指定它。


谢谢你的回答 :) 你给了我一个想法,让存储过程查找两个输入值之间的所有日期,并将它们与实际找到的数据进行左连接。 - KristianB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接