2

不幸的是,我没有足够的声誉点来发布图片,所以这里有一个示例图表的链接。

有谁知道我怎样才能让这个图表中的列与 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") 来尝试减少列组之间的间距,但这并没有任何影响。有没有人对如何排队有任何建议?

4

0 回答 0