如何使用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);
    }

如何使用SqlDataReader对象使用C#在图表上绘制Y轴

正如名称所说,类型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);