如何使用SqlDataReader对象使用C#在图表上绘制Y轴
本文关键字:绘制 SqlDataReader 何使用 对象 | 更新日期: 2023-09-27 18:24:08
我想使用SQlDatareader对象在图表上绘制Y轴。列中有int值。我正在通过代码隐藏生成图表。任何帮助都将不胜感激,因为我真的很接近我的目标,但只是被困在这里。下面是我的代码。实际上,我无法将Type dr转换为数组。
SqlCommand cmd = new SqlCommand("select items from student_info", conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
int[] yValues = { //Here I want the dr };
string[] xValues = { "Coke", "Pepsi","Coffee"};
Chart chart = new Chart();
Series series = new Series("Default");
series.ChartType = SeriesChartType.Column;
chart.Series.Add(series);
ChartArea chartArea = new ChartArea();
Axis yAxis = new Axis(chartArea, AxisName.Y);
Axis xAxis = new Axis(chartArea, AxisName.X);
chart.Series["Default"].Points.DataBindXY(xValues, yValues);
chart.ChartAreas.Add(chartArea);
chart.Width = new Unit(500, System.Web.UI.WebControls.UnitType.Pixel);
chart.Height = new Unit(200, System.Web.UI.WebControls.UnitType.Pixel);
string filename = "C:''check''Chart.png";
chart.SaveImage(filename, ChartImageFormat.Png);
Panel1.Controls.Add(chart);
}
正如名称所说,类型dr = DataRow
返回一个ROW
。因此它返回一个值。
如果要向数组中添加许多值,并且要使用数据库中的值,则需要创建一个数组,并在数组中填充DataRows的结果,同时循环遍历从查询中获得的值。
但我建议您使用列表<>而不是数组,然后使用ToArray方法。
示例代码:
List<int> xValues = new List<int>();
SqlDataReader dr = cmd.ExecuteReader();
if(dr.HasRows) //Check if datareader is not null, allways do this.
while (dr.Read())
{
int number;
bool result = Int32.TryParse(dr["items"], out number);
if (result) //check if its really a number
{
xValues.Add(number);
}
else
{
number = 0; //no number, so just assign 0 to the list
xValues.Add(number);
}
}
然后,如果您添加xValues和yValues:
chart.Series["Default"].Points.DataBindXY(xValues.ToArray(), yValues);
首先从sqldatareader创建数组。然后使用它生成图表。您还将图表代码放入while循环中。它将创建一个图表,并将其添加到student_info表中每行的面板中。因此,将图表代码放在while循环之外。
List<int> list = new List<int>();
SqlCommand cmd = new SqlCommand("select items from student_info", conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
list.Add(Convert.ToInt32(dr[0])); //getting all values in a List
}
int[] yValues = list.ToArray<int>(); //create your array here then use it
string[] xValues = { "Coke", "Pepsi","Coffee"};
Chart chart = new Chart();
Series series = new Series("Default");
series.ChartType = SeriesChartType.Column;
chart.Series.Add(series);
ChartArea chartArea = new ChartArea();
Axis yAxis = new Axis(chartArea, AxisName.Y);
Axis xAxis = new Axis(chartArea, AxisName.X);
chart.Series["Default"].Points.DataBindXY(xValues, yValues);
chart.ChartAreas.Add(chartArea);
chart.Width = new Unit(500, System.Web.UI.WebControls.UnitType.Pixel);
chart.Height = new Unit(200, System.Web.UI.WebControls.UnitType.Pixel);
string filename = "C:''check''Chart.png";
chart.SaveImage(filename, ChartImageFormat.Png);
Panel1.Controls.Add(chart);