不幸的是,我没有足够的声誉点来发布图片,所以这里有一个示例图表的链接。
有谁知道我怎样才能让这个图表中的列与 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") 来尝试减少列组之间的间距,但这并没有任何影响。有没有人对如何排队有任何建议?