下面正确绑定了图,但是值是以数字表示的,我们希望以百万计的形式显示,例如250M,200M(如果以百万为单位的值),否则以100k(如果以千为单位的值)显示...参见下文< / p>
Chart3.DataSource = dt11;
Chart3.ChartAreas["ChartArea3"].AxisX.MajorGrid.LineWidth = 0;
Chart3.ChartAreas["ChartArea3"].AxisY.LineWidth = 0;
Chart3.Series["Series1"].YValueMembers = "Amount";
Chart3.Series["Series1"].XValueMember = "Acquisition";
Chart3.DataBind();
答案 0 :(得分:0)
您可以根据需要使用LabelStyle.Format
属性设置Y轴数字刻度的格式:
// for numbers up to 1 milion
Chart3.ChartAreas["ChartArea3"].AxisY.LabelStyle.Format = "#,##0,k";
// for numbers more than 1 milion & less than 1 billion
Chart3.ChartAreas["ChartArea3"].AxisY.LabelStyle.Format = "#,##0,,M";
上面的代码中使用的技术称为{em>数字缩放说明符,基于this reference:
数字缩放说明符:如果指定了一个或多个逗号 紧接在显式或隐式小数点左侧的 每个逗号将要格式化的数字除以1000。例如, 如果使用字符串“ 0 ,,”格式化数字1亿,则 输出为“ 100”。
另外,要强制执行所需的格式,可以先使用if-condition条件检查序列的最大值,然后将最大比例设置为图表的AxisY.Maximum
属性:
// assumed dt11 is a DataTable,
// use Compute() method with Max() function to get maximum value of the series
var maxValue = Convert.ToInt32(dt11.Compute("Max([Amount])", string.Empty));
double maxScale;
if (maxValue < 1000000)
{
Chart3.ChartAreas["ChartArea3"].AxisY.LabelStyle.Format = "#,##0,k";
// set maximum scale to the nearest interval by 500,000
maxScale = Math.Ceiling(Convert.ToDouble(maxValue) / 500000d) * 500000;
}
else if (maxValue >= 1000000 && maxValue < 1000000000)
{
Chart3.ChartAreas["ChartArea3"].AxisY.LabelStyle.Format = "#,##0,,M";
// set maximum scale to the nearest interval by 5 million
maxScale = Math.Ceiling(Convert.ToDouble(maxValue) / 5000000d) * 5000000;
}
// other conditions
// set maximum scale
Chart3.ChartAreas["ChartArea3"].AxisY.Maximum = maxScale;