|
我一直在尝试从数据库中提取数据的多线图。2 i# T% q {3 E; d' \9 ?0 _
为此,我编写了以下代码来填写1 L2 H$ w4 [# ?4 h
图表:
% |% ], B2 U$ [2 R2 Q, ` SqlConnection con1 = new SqlConnection(); con1.ConnectionString = ConfigurationManager.ConnectionStrings["Removed"].ToString(); SqlCommand cmd1 = new SqlCommand("SELECT YEAR(Start_Date) AS Year,Month(Start_Date) As Month,Cost,Utility_Type FROM import_Utilities WHERE YEAR(Start_Date) = 2011 AND Utility_Type = 'Water'"); cmd1.Connection = con1; con1.Open(); SqlDataAdapter da1 = new SqlDataAdapter(cmd一、 DataTable dt1 = new DataTable(); da1.Fill(dt一、 Chart1.DataSource = dt1; Chart1.Series["Series2"].XValueMember = "Month"; Chart1.Series["Series2"].YValueMembers = "Cost"; Chart1.Legends.Add(new Legend("Default") { Docking = Docking.Right Chart1.DataBind(); con1.Close(); SqlConnection con = new SqlConnection(); con.ConnectionString = ConfigurationManager.ConnectionStrings["Removed"].ToString(); con.Open(); SqlCommand cmd = new SqlCommand("SELECT YEAR(Start_Date) AS Year,Month(Start_Date) As Month,Cost,Utility_Type FROM import_Utilities WHERE YEAR(Start_Date) = 2012 AND Utility_Type = 'Water'"); cmd.Connection = con; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); Chart1.DataSource = dt; Chart1.Series["2010"].XValueMember = "Month"; Chart1.Series["2010"].YValueMembers = "Cost"; Chart1.DataBind(); con.Close();代码是有效的,除了它有两个数据源,所以只有底部sqlconnection填充到图表中。我不知道如何解决这个问题,我认为他们做得更好,但我不知所措。
5 R' Y" h" j6 j- Y. _& N/ l更新:. ?6 K7 j$ @4 Y/ }% H
在下面的例子中,我最终使用数据透视表sql创建一个表。然后我将代码更新为以下内容:; n& q- w6 p$ `% R1 r
SqlCommand cmd = new SqlCommand("SELECT * FROM ( SELECT YEAR(Start_Date),CASE MONTH(Start_Date) WHEN 1 THEN 'January' WHEN 2 THEN 'February' WHEN 3 THEN 'March' WHEN 4 THEN 'April' WHEN 5 THEN 'May' WHEN 6 THEN 'June' WHEN 7 THEN 'July' WHEN 8 THEN 'August' WHEN 9 THEN 'September'WHEN 10 THEN 'October' WHEN 11 THEN 'November' WHEN 12 THEN 'December' END as [Month],[Cost] FROM [HousingAccountingReports].[dbo].[import_Utilities] Where [Building] = 'Building B' AND [Utility_Type] = 'Electric') TableDate PIVOT (SUM([Cost]) FOR [Month] IN ([January],[February],[March],[April],[May],[June],[July],[August],[September],[October],[November],[December] )) PivotTable"); cmd.Connection = con; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); Chart3.DataSource = dt; Chart3.Series["Series1"].XValueMember = "Month"; Chart3.Series["Series1"].YValueMembers = "2010"; Chart3.Series["Series2"].XValueMember = "Month"; Chart3.Series["Series2"].YValueMembers = "2011"; Chart3.Series["Series3"].XValueMember = "Month"; Chart3.Series["Series3"].YValueMembers = "2012"; Chart3.DataBind();`当我操作页面时,错误的提示找不到月列。如果我添加:dt.Columns.Add(“ Month”); dt.Columns.Add(“ Year”);`找不到2010,怎么办?
! d# r* W+ t0 x/ c正确驾驶我的图表?他们是我的数据透视sql的问题吗?& g4 l' f, f) y
# J) p1 b8 I n6 ` 解决方案:
. u) B% c( p+ a0 h9 U$ u 无需重置上述代码中的数据,就不能更改图表数据源。- s+ T$ S, ^. ]2 s: l9 B
就像昨天的问题一样,我建议你先创建一个数据表,然后在数据表中引用特定系列的列
. J9 Z P3 @3 w( K! }7 N从昨天的回答
/ `* x+ }/ h4 b6 |1 { |+ o因此,作为清理代码的建议,我将执行以下操作4 U& j& ^ [; D& N8 s
以月为主键,获取两个数据表,并将每个列添加到图表中! V8 Z, M, E7 x: Z! Q: T
so drop- T* C( t: d- u
Chart1.DataSource = dtChart1.Series["2010"].XValueMember = "Month";Chart1.Series["2010"].YValueMembers = "Cost";and replace it with
8 N; H% V% r- a5 MFor Each row As DataRow In dt1.Rows Chart1.Series("Series2").Points.AddXY(row.Item("Month"),row.Item("Cost"))NextFor Each row As DataRow In dt.Rows Chart1.Series("2010").Points.AddXY(row.Item("Month"),row.Item("Cost"))Next如果你试图将所有数据归类为一个Datatable并创建个系列的图表可以执行以下操作5 m6 A- \9 _) F `$ t# Z
Dim dt As New DataTable dt.Columns.Add("Month",GetType(String)) dt.Columns.Add("2010",GetType(Integer)) dt.Columns.Add("2011",GetType(Integer)) dt.Rows.Add("January",15、25) dt.Rows.Add("February",18、32) dt.Rows.Add("March",12、34) dt.Rows.Add("April",12、34) Chart1.DataSource = dt Chart1.Series(0).XValueMember = "Month" Chart1.Series(0).YValueMembers = "2010" Chart1.Series(1).XValueMember = "Month" Chart1.Series(1).YValueMembers = "2011" Chart1.DataBind()Based on your code this should work to my understanding:
$ ]( i: l6 j1 Z1 k& mSqlConnection con = new SqlConnection();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;con.ConnectionString = ConfigurationManager.ConnectionStrings["removed"].ToString();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;con.Open();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SqlCommand cmd = new SqlCommand("SELECT YEAR(Start_Date) AS Year,Month(Start_Date) As Month,Cost,Utility_Type,Building FROM import_Utilities WHERE YEAR(Start_Date) = 2012 AND YEAR(Start_Date) = 2011 AND Utility_Type = 'Water'"); cmd.Connection = con; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;da.Fill(dt); Chart1.DataSource = dt; Chart1.Series(0).XValueMember = "Month"; Chart1.Series(0).YValueMembers = "2010"; Chart1.Series(1).XValueMember = "Month"; Chart1.Series(1).YValueMembers = "2011" Chart1.DataBind()数据表dt中应包含所有数据(因为我在两年中都在作画)(我如何将其绑定到表以便可以进行验证) N/ b4 {& g8 l0 o y: Q a
目前,其抱怨系列不能作为一种方式使用。7 H4 P' Q; k5 w% Z
我是一个非常新的程序员,只能在业余时间这样做,所以请原谅我的简单错误。
. V8 U3 |1 z; |2 g1 F' t0 U7 p我需要像这里一样设置数据表吗:Chart1.DataSource = dt;Chart1.Series(0).XValueMember =“月”;Chart1.Series(0).YValueMembers =“ 2010”;+ x4 F* G' y/ d9 {8 O1 _
Chart1.Series(1).XValueMember = "Month"; Chart1.Series(1).YValueMembers = "2011" Chart1.DataBind()还是基于sql表来做? |
|