我在asp.net的图表上工作,这是从DataTable创建的。基本上我有这样的DataTable:
所以,我在图表中想要的是每个不同位置的列,对于每个不同的类型,我想要一个"部分"列的意思是我希望每个类型的每个位置都有一列。
我设法做了这样的事情,但不是我想要的:
现在我将尝试解释我的代码。
首先,我将数据表中的不同位置添加到字符串列表
string loc = "";
for (int i = 0; i < dtTipos.Rows.Count; i++)
{
if (loc != dtTipos.Rows[i]["Location"].ToString())
listaLocais.Add(dtTipos.Rows[i]["Location"].ToString());
loc = dtTipos.Rows[i]["Location"].ToString();
}
之后,对于每个不同的位置,我选择相应位置的行并为每个位置创建一个系列。我继续创建一个y = 0的点和一个y = total
的点for (int i = 0; i < listaLocais.Count; i++)
{
DataRow[] lRow = dtTipos.Select("Location = '" + listaLocais[i] + "'");
foreach (DataRow dr in lRow)
{
string serie = dr["Location"].ToString().Substring(0, 2) + "_" + dr["Type"].ToString() + " - " + dr["Total"].ToString();
Series s = new Series();
s.Name = serie;
s.Label = dr["Location"].ToString();
s.ChartType = SeriesChartType.StackedColumn;
chartTipo1.Series.Add(s);
s.Points.AddXY(i + 1, 0);
s.Points[0].Label = " ";
s.Points.AddXY(i + 1,Convert.ToInt32(dr["Total"].ToString()));
s.Points[1].Label = " ";// dtTipos.Rows[i]["Total"].ToString();
}
}
事情是:我认为因为我为每一行创建了一个系列,每次我使用不同的列时,y轴从我离开它的位置开始。
有什么办法可以让这个工作吗? 我会感激任何帮助。
答案 0 :(得分:1)
您在同一循环中添加系列和数据点。首先添加您的系列,然后添加您的数据点:
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new MyDataTable();
//first add your series
foreach (DataRow row in dt.DefaultView.ToTable(true, new string[] { "Type" }).Rows)
{
Series series = new Series();
series.Name = (string)row["Type"];
series.ChartType = SeriesChartType.StackedColumn;
Chart1.Series.Add(series);
}
// then add your points;
foreach (DataRow row in dt.Rows)
Chart1.Series[(string)row["Type"]].Points.AddXY(row["Location"], new object[] { row["Total"] });
}
}