列组之间的柱形图间距和x轴上的列对齐方式

时间:2012-05-07 22:51:18

标签: asp.net data-visualization alignment asp.net-charts

很遗憾,我没有足够的信誉点来发布图片,所以这里是指向example chart的链接。

有谁知道如何让此图表中的列与x轴正确对齐?图表上的大多数列甚至都不接近各自的x轴标签。如果你看一下我的例子,前两列与2005 x轴对齐,但它甚至没有显示在图表中。与最后一列相同。但是,它不会出现在图表中,但它应与2015 x轴对齐。

我一直在研究这个问题已有一段时间了。我找到的所有可能的解决方案(包括SO)都没有对我有用。

这是我为生成示例输出而编写的代码: (标记)

<div style="width:100%;">
    <div>        
        <asp:Chart ID="chEmpTRI" runat="server" Width="600px">
            <series>
            </series>
            <chartareas>
                <asp:ChartArea Name="ChartArea1">
                </asp:ChartArea>
            </chartareas>
        </asp:Chart>
        <asp:SqlDataSource ID="sdsEmpTRI" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" 
            SelectCommand="
                SELECT 
                    [Desc], 
                    [Year], 
                    [Value] 
                FROM [vw_EmpTRI] 
                --WHERE [Year] BETWEEN 2005 AND 2007
                ORDER BY [Year], [Desc]">
        </asp:SqlDataSource>        
    </div>
</div>

(代码背后)

 int? min = 0, max = 0;
protected void Page_Load(object sender, EventArgs e)
{        
    DataView dv = sdsEmpTRI.Select(DataSourceSelectArguments.Empty) as DataView;
    if (dv != null)
    {
        min = dv.Table.Compute("Min(Year)", string.Empty) as int?;
        max = dv.Table.Compute("Max(Year)", string.Empty) as int?;

        if (min.HasValue && max.HasValue)
        {
            for (int i = min.Value; i <= max.Value; i++)
            {
                dv.RowFilter = String.Format("[Year] = {0}", i);
                foreach (DataRowView drv in dv)
                {                                              
                    Decimal? value = drv.Row.Field<Decimal?>("Value");
                    Series s = new Series(String.Format("{0}_{1}", drv.Row.Field<string>("Desc"), i));
                    s.ChartType = SeriesChartType.Column;
                    s.XValueType = ChartValueType.Int32;                       
                    DataPoint p = new DataPoint(s);
                    p.XValue = i;
                    p.YValues = new double[] { value.HasValue ? decimal.ToDouble(value.Value) : double.NaN };
                    s.Points.Add(p);
                    s.SetCustomProperty("PixelPointWidth", "150");
                    s.SetCustomProperty("PointWidth", "1");
                    s.Label = String.Format("{0}", value);
                    chEmpTRI.Series.Add(s);
                }
            }
        }
    }
}

我尝试使用自定义属性s.SetCustomProperty(“PointWidth”,“1”)来尝试减少列组之间的间距,但这并没有影响到什么。有没有人有关于如何排队的建议?

0 个答案:

没有答案