我想在网页中添加动态图表。事情是这样的……
我从用户那里获取开始日期和结束日期,并为开始日期和结束日期之间的每个日期绘制单独的图表。
我从 sql 数据库中获取数据并将其与图表绑定(bind),如下所示:
SqlConnection UsageLogConn = new
SqlConnection(ConfigurationManager.ConnectionStrings["UsageConn"].ConnectionString);
UsageLogConn.Open();//open connection
string sql = "SELECT v.interval,dateadd(mi,(v.interval-1)*2,'" + startdate + " 00:00:00') as 'intervaltime',COUNT(Datediff(minute,'" + startdate + " 00:00:00',d.DateTime)/2) AS Total FROM usage_internet_intervals v left outer join (select * from Usage_Internet where " + name + " LIKE ('%" + value + "%') and DateTime BETWEEN '" + startdate + " 00:00:00' AND '" + enddate + " 23:59:59') d on v.interval = Datediff(minute,'" + startdate + " 00:00:00',d.DateTime)/2 GROUP BY v.interval,Datediff(minute,'" + startdate + " 00:00:00',d.DateTime)/2 ORDER BY Interval";
SqlCommand cmd = new SqlCommand(sql, UsageLogConn);
SqlDataAdapter mySQLadapter = new SqlDataAdapter(cmd);
Chart1.DataSource = cmd;
// set series members names for the X and Y values
Chart1.Series["Series 1"].XValueMember = "intervaltime";
Chart1.Series["Series 1"].YValueMembers = "Total";
UsageLogConn.Close();
// data bind to the selected data source
Chart1.DataBind();
cmd.Dispose();
上面的代码只为一个日期添加了一个图表,并且我已经将“chart1”添加到设计 View 并且它不是动态创建的。但我想在运行时向网页添加更多动态图表。
谁能帮我解决这个问题?
我正在使用 VS 2008,ASP.NET 3.5 图表库是:using System.Web.UI.DataVisualization.Charting;
最佳答案
好吧,我可能做得太过了,但我试着让它变得非常动态。是的,列表名称有点奇怪,但我使用了我的另一个示例来构建它。
protected void Page_Load(object sender, EventArgs e)
{
Bench[] benchList;
FoodIntake[] foodIntakeList;
Panel panelChartHolder;
panelChartHolder = new Panel();
Controls.Add(panelChartHolder);
benchList = Bench.GetAll();
AddNewCharts(benchList, panelChartHolder,
GetBenchXValue, GetBenchYValue);
foodIntakeList = FoodIntake.GetAll();
AddNewCharts(foodIntakeList, panelChartHolder,
GetFoodIntakeXValue, GetFoodIntakeYValue);
}
好的,第一部分很简单。创建一个面板来保存您正在添加的图表,获取您想要由图表表示的列表(对于本示例,它们恰好与 Linq to Sql 一起使用)并调用该方法来创建图表。
private void AddNewCharts<T>(T[] listToAdd, Panel panelToAddTo,
Func<T, DateTime> xMethod, Func<T, Int32> yMethod)
{
ChartArea mainArea;
Chart mainChart;
Series mainSeries;
mainChart = new Chart();
mainSeries = new Series("MainSeries");
for (Int32 loopCounter = 0; loopCounter < listToAdd.Length; loopCounter++)
{
mainSeries.Points.AddXY(xMethod(listToAdd[loopCounter]),
yMethod(listToAdd[loopCounter]));
}
mainChart.Series.Add(mainSeries);
mainArea = new ChartArea("MainArea");
mainChart.ChartAreas.Add(mainArea);
panelToAddTo.Controls.Add(mainChart);
}
如您所见,我刚刚创建了一个新图表,向其中添加了一个系列,并向其中添加了一个 ChartArea。下一部分几乎只是遍历集合并将其中的每个项目添加到列表本身。它使用传入的委托(delegate)方法 (Func) 来获取 X 和 Y 值。
最后一部分包含负责从两个列表中获取 X 和 Y 值的四种方法。基本上我这样做是为了让图表创建方法尽可能通用。可能有点矫枉过正。
private DateTime GetBenchXValue(Bench currentBench)
{
return currentBench.DateLifted;
}
private Int32 GetBenchYValue(Bench currentBench)
{
return currentBench.BenchAmount;
}
private DateTime GetFoodIntakeXValue(FoodIntake currentIntake)
{
return currentIntake.DateEaten;
}
private Int32 GetFoodIntakeYValue(FoodIntake currentIntake)
{
return currentIntake.Calories;
}
所以当你运行它时,你会得到两个并排的图表。请注意,它们将非常简单,因为可以设置数百万种不同的属性来改善外观。希望这就是您所要求的。
using System;
using System.Web.UI.DataVisualization.Charting;
using System.Web.UI.WebControls;
关于c# - 使用 ASP.NET CHART CONTROL 添加动态图表,c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/335061/