C# 将图表数据绑定到日期选择器以显示自定义时间线
我对c很陌生# 我已经在我的WinForms应用程序中创建了一个条形图,通过将它们连接到MSSQL存储过程作为数据源,但我需要提供一个日期选择器函数(from和to),当用户选择日期时,只需将过滤过的数据填充到图表中,但每当我单击update按钮,图表将额外获取数据(参见图片),而不是进行过滤 我的查特程序:C# 将图表数据绑定到日期选择器以显示自定义时间线,c#,sql-server,visual-studio,winforms,C#,Sql Server,Visual Studio,Winforms,我对c很陌生# 我已经在我的WinForms应用程序中创建了一个条形图,通过将它们连接到MSSQL存储过程作为数据源,但我需要提供一个日期选择器函数(from和to),当用户选择日期时,只需将过滤过的数据填充到图表中,但每当我单击update按钮,图表将额外获取数据(参见图片),而不是进行过滤 我的查特程序: create proc toprej @fromDate date, @toDate date as select top 10 RejectReason1 as Reason, Sum(
create proc toprej
@fromDate date,
@toDate date
as
select top 10 RejectReason1 as Reason, Sum(NetWt) as Quantity
from IP_Spools
Where status = 'Reject' AND DOE between @fromDate and @toDate
group by RejectReason1
order by Sum(NetWt) desc
go
winform中图表的我的代码:
private void GraphToprej()
{
SqlConnection con = new SqlConnection(cs);
SqlCommand cmd = new SqlCommand("Toprej", con);
cmd.Parameters.AddWithValue("@fromDate", dtfrom.Value);
cmd.Parameters.AddWithValue("@toDate", dtto.Value);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Rejcategory.Add(dr.GetString(0));
RejSum.Add(dr.GetInt32(1));
}
ChartTopRej.Series[0].Points.DataBindXY(Rejcategory, RejSum);
dr.Close();
con.Close();
}
private void datefil_Click(object sender, EventArgs e)
{
GraphToprej();
}
图为:
请帮助我解决此问题。在这种情况下,您必须在每次单击按钮时重新创建图形对象。为此,必须清除图形控件。例如,您正在按日期范围将数据发送到列表框中。更改日期范围并再次发送数据时,应使用listbox1.Items.clear()清除此列表框 你是C#的新手,所以我想提个建议 我的建议是将这个链接与一个类分开,并从一个点处理它。我建议您研究关注点分离(SoC) 此外,我建议您按如下方式运行代码<代码>使用块处理对象并自动关闭连接
using (SqlConnection connection = new SqlConnection("..."))
{
conn.Open();
//commands
}
更新
我更详细地读了你写的问题。问题是您在全局范围中定义了ArrayList对象。在这样的定义中,数据保留在内存中,您需要清除它。您可以在方法中定义它,也可以在全局scop中编写它,并在方法中创建一个实例
你可以试试这个,我试过了
private void GraphToprej()
{
ArrayList Rejcategory = new ArrayList();
ArrayList RejSum = new ArrayList();
//then write SqlConnection and other codes...
}
或
你好@Volkan Barbaros Gurcan..我试过
charttoprej.series.clear()代码>在方法调用上方,但现在我得到索引超出范围异常。实际问题是每次单击按钮时,图表都会添加新值,而不是更新。
private void GraphToprej()
{
ArrayList Rejcategory = new ArrayList();
ArrayList RejSum = new ArrayList();
//then write SqlConnection and other codes...
}
//Global Scope
ArrayList Rejcategory;
ArrayList RejSum;
//Your Method
private void GraphToprej()
{
Rejcategory = new ArrayList();
RejSum = new ArrayList();
//then write SqlConnection and other codes...
}