ASP.NET图表 - Y值不从0开始

时间:2016-12-15 13:07:41

标签: c# asp.net .net charts datatable

我在asp.net的图表上工作,这是从DataTable创建的。基本上我有这样的DataTable:

enter image description here

所以,我在图表中想要的是每个不同位置的列,对于每个不同的类型,我想要一个"部分"列的意思是我希望每个类型的每个位置都有一列。

我设法做了这样的事情,但不是我想要的:

enter image description here

现在我将尝试解释我的代码。

首先,我将数据表中的不同位置添加到字符串列表

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轴从我离开它的位置开始。

有什么办法可以让这个工作吗? 我会感激任何帮助。

1 个答案:

答案 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"] });
    }
}

enter image description here