C#图表从数据表中添加多个系列 [英] C# Charts add multiple series from datatable

查看:135
本文介绍了C#图表从数据表中添加多个系列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我检索我的数据库几个数据表,其大小不等。 2这一个是只是一个例子。



看到这里的结构!结果
结果
我设法创造2不同的系列,并让它们出现在的传说。



我的问题是如何将数据绑定到相应的系列。
系列名从列doman_namn创建系列的量是从持有的唯一URL的数量安塔尔列创建。




如何绑定阿迪和ADDX到现在失败图表。



这是到目前为止我的代码...

  Chart1.DataSource = DT; 

INT amountofrows = Convert.ToInt32(dt.Rows [0] [安塔尔]的ToString());

的for(int i = 0; I< amountofrows;我++)
{
串serieName = dt.Rows [I] [doman_namn]的ToString()。

Chart1.Series.Add(serieName);
Chart1.Series [I] .ChartType = SeriesChartType.Line;

的foreach(在dt.Rows的DataRow DR)
{

{
如果(String.Equals(serieName,博士[doman_namn]的ToString(),StringComparison.Ordinal))
{
Chart1.Series [serieName] .Points.AddY(Convert.ToDouble(DR [ranking_position]));
Chart1.Series [serieName] .Points.AddY(Convert.ToDouble(DR [ranking_date]));
}
}
赶上(例外)
{
抛出新的InvalidOperationException异常(添加点时失败);
}
}
}


Chart1.DataBind();
Chart1.Visible = TRUE;

代码的帮助GREGOR结果


$ B $后B

 的for(int i = 0; I< amountofrows;我++)
{
串serieName = dt.Rows [I] [doman_namn]的ToString ();

Chart1.Series.Add(serieName);
Chart1.Series [I] .ChartType = SeriesChartType.Line;

Chart1.Series [serieName] .XValueMember =ranking_date;
Chart1.Series [serieName] .YValueMembers =ranking_position;

}
Chart1.DataBind();


解决方案

 好吧,我成功地做我自己!但是你格雷戈尔PRIMAR把我推在正确的方向! 



什么,重要的是你设置的X轴和Y轴的值类型。作为小数类型是不是一种选择,我用自动类型

  Chart1.DataSource = DT; 

INT amountofrows = Convert.ToInt32(dt.Rows [0] [安塔尔]的ToString());

的for(int i = 0; I< amountofrows;我++)
{
名单,LT;字符串> xvals =新的List<串GT;();
名单,LT;十进制> yvals =新的List<&小数GT;();
串serieName = dt.Rows [I] [doman_namn]的ToString()。
Chart1.Series.Add(serieName);
Chart1.Series [I] .ChartType = SeriesChartType.Line;

的foreach(在dt.Rows的DataRow DR)
{

{


如果(String.Equals( 。serieName,博士[doman_namn]的ToString(),StringComparison.Ordinal))
{
xvals.Add(DR [ranking_date]的ToString());
yvals.Add(Convert.ToDecimal(DR [ranking_position]的ToString()));
}

}
赶上(例外)
{

抛出新的InvalidOperationException异常(Diagrammet昆德INTE ritas UPP);
}
}

{
Chart1.Series [serieName] .XValueType = ChartValueType.String;
Chart1.Series [serieName] .YValueType = ChartValueType.Auto;
Chart1.Series [serieName] .Points.DataBindXY(xvals.ToArray(),yvals.ToArray());
}
赶上(例外)
{

抛出新的InvalidOperationException异常(昆德INTE绑定punkterna直到Diagrammet);
}
}

Chart1.DataBind();
Chart1.Visible = TRUE;


I retrieve several datatables from my DB, which vary in size. This one of 2 is just an example.

See the structure here!

I managed to create the 2 different series and have them show up on the legend.

My question is on how to bind that data to the respective series. The series name are created from column doman_namn and the amount of series are created from the "antal" column which holds the number of unique URLS.

QUESTION HOW TO BIND ADDY and ADDX to the chart it fails now.

This is my code so far...

 Chart1.DataSource = dt;

        int amountofrows = Convert.ToInt32(dt.Rows[0]["antal"].ToString());

        for (int i = 0; i < amountofrows; i++)
        {
            string serieName = dt.Rows[i]["doman_namn"].ToString();

            Chart1.Series.Add(serieName);
            Chart1.Series[i].ChartType = SeriesChartType.Line;

            foreach(DataRow dr in dt.Rows)
            {
                try
                {
                    if (String.Equals(serieName,dr["doman_namn"].ToString(), StringComparison.Ordinal))     
                    {
                    Chart1.Series[serieName].Points.AddY(Convert.ToDouble(dr["ranking_position"]));
                    Chart1.Series[serieName].Points.AddY(Convert.ToDouble(dr["ranking_date"]));
                    }
                }
                catch (Exception)
                {
                    throw new InvalidOperationException("Failed when adding points");
                }
            }
        }


        Chart1.DataBind();
        Chart1.Visible = true;

CODE AFTER HELP FROM GREGOR

        for (int i = 0; i < amountofrows; i++)
        {
            string serieName = dt.Rows[i]["doman_namn"].ToString();

            Chart1.Series.Add(serieName);
            Chart1.Series[i].ChartType = SeriesChartType.Line;

            Chart1.Series[serieName].XValueMember = "ranking_date";
            Chart1.Series[serieName].YValueMembers = "ranking_position";

    }
     Chart1.DataBind();

解决方案

Okay I managed to do it myself! But you Gregor Primar pushed me in the right direction!!

What was important was that you set the valuetype for the X and Y-axis. As decimal type was not an option I used auto as type.

        Chart1.DataSource = dt;

        int amountofrows = Convert.ToInt32(dt.Rows[0]["antal"].ToString());

        for (int i = 0; i < amountofrows; i++)
        {
            List<string> xvals = new List<string>();
            List<decimal> yvals = new List<decimal>();
            string serieName = dt.Rows[i]["doman_namn"].ToString();
            Chart1.Series.Add(serieName);
            Chart1.Series[i].ChartType = SeriesChartType.Line;

            foreach(DataRow dr in dt.Rows)
            {
                try
                {


                if (String.Equals(serieName,dr["doman_namn"].ToString(), StringComparison.Ordinal))     
                {                    
                    xvals.Add(dr["ranking_date"].ToString());
                    yvals.Add(Convert.ToDecimal(dr["ranking_position"].ToString()));              
                }

                }
                catch (Exception)
                {

                    throw new InvalidOperationException("Diagrammet kunde inte ritas upp");
                }
            }
            try
            {
                Chart1.Series[serieName].XValueType = ChartValueType.String;
                Chart1.Series[serieName].YValueType = ChartValueType.Auto;
                Chart1.Series[serieName].Points.DataBindXY(xvals.ToArray(), yvals.ToArray());
            }
            catch (Exception)
            {

                throw new InvalidOperationException("Kunde inte bind punkterna till Diagrammet");
            }    
        }

        Chart1.DataBind();
        Chart1.Visible = true;

这篇关于C#图表从数据表中添加多个系列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆