当饼图的分块大于10块的时候,往往会显得很杂乱,标签可能会叠加到一起,所以应该在饼图中加入“其它”块,把那些top10分开表示,剩下的就可以放在“其它”块里,这样界面较美观,以下为代码实现
其中dataRowPro 为datatable中的datarow
private string m_strColumn = string.Empty; // 显示该列的数字
private string m_strName = string.Empty; // 显示列名
ArrayList dataRowProList = new ArrayList();
Hashtable htShowName = new Hashtable();
if (dataRowPro.Length > 10) //当分类大于10的时候
{
for (int i = 0; i < dataRowPro.Length; i++)
{
dataRowProList.Add(Convert.ToDouble(dataRowPro[i][m_strColumn]));
htShowName.Add(dataRowProList[i], dataRowPro[i][m_strShowName].ToString().Trim());
}
dataRowProList.Sort();
for (int i = 0; i < dataRowProList.Count - 1; i++)
{
dataRowPro[i][m_strColumn] = dataRowProList[dataRowProList.Count - 1-i];
dataRowPro[i][m_strShowName] = htShowName[dataRowProList[dataRowProList.Count - 1 - i]].ToString();
}
double totals = 0.0;
for (int i = 0; i < 9; i++)
{
if (string.IsNullOrEmpty(dataRowPro[i][m_strColumn].ToString()) == true)
{
dataRowPro[i][m_strColumn] = "0";
}
segment[i] = myPane.AddPieSlice(Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100, Color.Yellow, Color.Red, 450f, 0.1+i/50, dataRowPro[i][m_strShowName].ToString().Trim() + "(" + Math.Round(Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100, 2) + "%)");
totals += Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100;
}
totals = 100.00 - totals;
segment[9] = myPane.AddPieSlice(totals, Color.GreenYellow, Color.Red, 40f, 0.1, "其它" + "(" + Math.Round(totals, 2) + "%)");
}
else {
for (int i = 0; i < dataRowPro.Length; i++)
{
if (string.IsNullOrEmpty(dataRowPro[i][m_strColumn].ToString()) == true)
{
dataRowPro[i][m_strColumn] = "0";
}
segment[i] = myPane.AddPieSlice(Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100, Color.FromArgb(ra.Next(2, 255), ra.Next(3, 235), ra.Next(4, 200)), Color.Red, 40f, 0.1, dataRowPro[i][m_strShowName].ToString().Trim() + "(" + Math.Round(Convert.ToDouble(dataRowPro[i][m_strColumn]) / protypeTotal * 100, 2) + "%)");
}
}
masterPane.AxisChange();
这是部分逻辑代码实现,只要实现了datarowpro,以下代码可直接用
CIO之家 www.ciozj.com 公众号:imciow