很遗憾,我没有足够的信誉点来发布图片,所以这里是指向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”)来尝试减少列组之间的间距,但这并没有影响到什么。有没有人有关于如何排队的建议?