【问题标题】:ASP.NET Charting - Y value doesn't start at 0ASP.NET 图表 - Y 值不从 0 开始
【发布时间】:2016-12-15 13:07:41
【问题描述】:

我正在asp.net 中处理从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 轴都从我离开它的位置开始。

有什么办法可以让它工作吗? 如有任何帮助,我将不胜感激。

【问题讨论】:

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


    【解决方案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"] });
        }
    }
    

    【讨论】:

    • 我不敢相信它这么简单。但是,现在遇到了不同的问题。并非所有位置都出现在图表中(我有 6 个位置,但只有 4 个出现)。这是由于某些类型在缺失的位置重复造成的吗?
    • 为了给您一个明确的答案,您必须发布MCVE,以便人们可以重现您的具体问题。如果我的帖子解决了您当前的问题,请记住将其标记为已接受,然后针对您的新问题发布一个新问题,但请确保您知道如何按照上面链接中的说明提出正确的问题。
    • 我无法将信息放在正确的列中,它一直在混淆 - 错误的值会出现在错误的位置。我应该为此提出另一个问题还是编辑这个问题?
    • 请发布一个包含足够具体细节的新问题,以便人们提供帮助。
    • 会这样做。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多