C# 用C,SQL绘制(X,Y)条形图
我试图绘制一个Xweeks,YFuel Amount图,显示每个给定间隔(比如周)消耗的燃油总量,但目前该图仅显示DayX的燃油量。我怎样才能最好地绘制它来显示每周消耗的所有燃油量。下面是绘制当前图表的代码`C# 用C,SQL绘制(X,Y)条形图,c#,sql,sql-server,graph,mschart,C#,Sql,Sql Server,Graph,Mschart,我试图绘制一个Xweeks,YFuel Amount图,显示每个给定间隔(比如周)消耗的燃油总量,但目前该图仅显示DayX的燃油量。我怎样才能最好地绘制它来显示每周消耗的所有燃油量。下面是绘制当前图表的代码` private void Load_BTN_Click(object sender, EventArgs e) { try { string selectQuery = "Select * f
private void Load_BTN_Click(object sender, EventArgs e)
{
try
{
string selectQuery = "Select * from Fuel_Attendend";
cmd = new SqlCommand(selectQuery, connection);
try
{
connection.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
this.chart1.Series["Date"].Points.AddXY(dr.GetString(3), dr.GetInt32(6));
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
`。这是SQL表。如果要显示每周的金额,最简单的方法是将SQL更改为“按周分组”。类似于
select sum(Fuel_Amount), DATEDIFF(week, '2018-01-01', Date) AS WeekNumber from Fuel_Attended group by DATEDIFF(week, '2018-01-01', Date)
在向系列1中添加点时,必须更改用作第一列和第二列的列
this.chart1.Series["Date"].Points.AddXY(dr.Int32(0), dr.GetInt32(1));
或者你可以使用
select sum(Fuel_Amount), DATEADD(week, DATEDIFF(week, '1950-01-01', Date), '1950-01-01') AS WeekNumber from Fuel_Attended group by DATEADD(week, DATEDIFF(week, '1950-01-01', Date), '1950-01-01')
这会将一周表示为一周开始的星期日。不仅仅是一个数字。我不确定您缺少了什么,但我看到一件事:您将y值添加为字符串,这几乎总是一个错误,尽管这是一个常见的错误。在这里,当他们是日期是肯定是错误的除此之外:可能您想为总和添加一个系列?或者您只是想将sql更改为类似“选择日期”、“按日期分组”之类的内容?如果您想按周分组金额,您必须。。。鼓轮。。。每周分组。更改您的select,使其具有select SUMFOOLEAMOUNT、DATEDIFFweek、'2011-05-30',日期为Fuel_参加小组的周数WeekNumber@TaW你能解释更多吗..谢谢你指的是哪一部分?@Agapwlesu谢谢我这么做了,但是我现在得到的指定演员阵容无效。错误,因此无法加载图形。我在SQLSERVER中使用“date”数据类型表示日期,使用“int”数据类型表示燃料量。。this.chart1.Series[Date].Points.AddXYdr.GetDateTime0,dr.GetInt321;在原始代码中,您使用GetString作为日期时间列。这是有效的——尽管它没有提供所需的数据,但它提供了该日期列的值。在我的回答中,最后一个select生成了一个datetime值,因此使用GetString而不是GetDateTime可能会起作用。我会尝试这样做,或者更好的是,逐步检查您的代码,看看它在哪里失败,是什么对象被强制转换到错误的对象,以及给出异常的代码所期望的是什么。然后调整代码。好的,让我尝试使用GETSTRING,我会给你反馈。