C#Charts从datatable添加多个系列

我从我的数据库中检索了几个数据表,这些数据表的大小各不相同。 这两个中的一个只是一个例子。

看到这里的结构!
在此处输入图像描述
我设法创建了2个不同的系列,让它们出现在传奇故事中。

我的问题是如何将数据绑定到相应的系列。 系列名称是从列doman_namn创建的,系列的数量是从“antal”列创建的,该列包含唯一URL的数量。

问题如何将ADDY和ADDX绑定到它现在失败的图表上。

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

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; 

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(); 

看看我的一个示例如何使用代码将DataTable绑定到MS Chart:

如何从控制台应用程序中基于DataTable绘制图表?

希望你会发现它很有用。

以下是要点:

 //setting the source from datatable.... chart.DataSource = dt; //setting XValueMember for first serie (Name is column inside datasource)... serie1.XValueMember = "ranking_position"; //setting YValueMembers... serie1.YValueMembers = "ranking_date"; 

这是绑定多个系列的另一个链接:

http://dotnetslackers.com/articles/net/Binding-a-Microsoft-Chart-with-a-Dataset.aspx

我自己设法做到了,但是Gregor Primar让我朝着正确的方向前进!

重要的是你设置了X轴和Y轴的值类型。 由于十进制类型不是一个选项,我使用auto作为类型。

 Chart1.DataSource = dt; int amountofrows = Convert.ToInt32(dt.Rows[0]["antal"].ToString()); for (int i = 0; i < amountofrows; i++) { List xvals = new List(); List yvals = new List(); 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;