回答

收藏

多折线图

技术问答 技术问答 122 人阅读 | 0 人回复 | 2023-09-13

我一直在尝试从数据库中提取数据的多线图。
0 ?; T( w# W2 P为此,我编写了以下代码来填写
; R1 u; I/ h7 r5 H6 Y2 ~% Z9 ?图表:
$ B7 Q, b8 h& w: C                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填充到图表中。我不知道如何解决这个问题,我认为他们做得更好,但我不知所措。
* G2 o. S" }4 w5 ^更新:( W7 ], n$ F$ [/ s; S. H
在下面的例子中,我最终使用数据透视表sql创建一个表。然后我将代码更新为以下内容:
' a. q2 n# n, c2 x    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,怎么办?
& ^3 x5 I$ `# x+ h$ H正确驾驶我的图表?他们是我的数据透视sql的问题吗?. U/ L: [: ?6 _. R& K
                                                                7 [% H& C+ |$ }3 E
    解决方案:                                                               
# r2 f, {9 H5 K4 |/ t  U                                                                无需重置上述代码中的数据,就不能更改图表数据源。
% ?; l. j1 A( M- s" i就像昨天的问题一样,我建议你先创建一个数据表,然后在数据表中引用特定系列的列( l6 h' d# F+ E0 T! J
从昨天的回答
, H) ^; U+ E% T因此,作为清理代码的建议,我将执行以下操作& T2 h  A8 N3 A9 f% e5 \' g  I, v
以月为主键,获取两个数据表,并将每个列添加到图表中/ J& `6 @" K7 |6 i0 v3 ~
so drop
9 F; ?3 W( n- U; \, b+ [4 nChart1.DataSource = dtChart1.Series["2010"].XValueMember = "Month";Chart1.Series["2010"].YValueMembers = "Cost";and replace it with
, h! `6 t) q. z4 }% y# _+ c9 [For 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并创建个系列的图表可以执行以下操作
+ O5 g: Z* O: ?: u6 q/ B                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:6 I% H/ ^( F1 G! C/ x2 h" C  t
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,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中应包含所有数据(因为我在两年中都在作画)(我如何将其绑定到表以便可以进行验证)8 O! g0 w* f5 h; G
目前,其抱怨系列不能作为一种方式使用。# H8 d. R6 x  k: G  f! Y+ d
我是一个非常新的程序员,只能在业余时间这样做,所以请原谅我的简单错误。$ H$ `4 ?5 q$ S( k8 d! z
我需要像这里一样设置数据表吗:Chart1.DataSource = dt;Chart1.Series(0).XValueMember =“月”;Chart1.Series(0).YValueMembers =“ 2010”;7 v- t5 [% T6 f: h) }
                Chart1.Series(1).XValueMember = "Month";    Chart1.Series(1).YValueMembers = "2011"    Chart1.DataBind()还是基于sql表来做?
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则