我一直在努力弄清楚这个问题,而且似乎无法得到它。我有一个函数,我正在调用SQL存储过程,使用SQL DataReader我返回一个表。现在这个表有8列,但我在每个行中只使用了5列。我创建了一个名为chartInfo的对象[],希望用第一行中的五个值填充对象并通过行进行交互,并继续遍历填充对象的行,直到我到达结尾。使用下面的代码,它适用于第一次交互,它获取值,将它们放在一个对象数组中,我可以在我的图表中使用它。
SqlDataReader reader = cmd.ExecuteReader();
Object[] chartInfo = new Object[5];
Object[] chartInfo1 = new Object[4];
if (reader.HasRows)
{
if (reader.Read())
{
chartInfo[0] = Convert.ToDouble(reader.GetValue(1));
chartInfo[1] = Convert.ToDouble(reader.GetValue(2));
chartInfo[2] = Convert.ToDouble(reader.GetValue(3));
chartInfo[3] = Convert.ToDouble(reader.GetValue(4));
chartInfo[4] = Convert.ToDouble(reader.GetValue(5));
//chartInfo1[0] = 500;
//chartInfo1[1] = 20000;
//chartInfo1[2] = 45125;
//chartInfo1[3] = 68954;
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
// Declare the HighCharts Object
DotNet.Highcharts.Highcharts charts = new DotNet.Highcharts.Highcharts("chart")
.InitChart(new Chart
{
// Inital Loading of the chart, default is line
DefaultSeriesType = ChartTypes.Line
})
.SetPlotOptions(new PlotOptions
{
Pie = new PlotOptionsPie
{
DataLabels = new PlotOptionsPieDataLabels
{
Enabled = true
}
}
})
.SetTitle(new Title
{
Text = "Overall Sales From Previous Years",
X = -20
})
.SetSubtitle(new Subtitle
{
Text = "Source: Sales Database",
X = -20
})
.SetXAxis(new XAxis
{
Categories = new[] { "2010", "2011", "2012", "2013", "2014" }
})
.SetSeries(new[]
{
new Series{ Name = "Carbide(total specials)", Data = new Data(chartInfo), Color = ColorTranslator.FromHtml("#FDB813") },
new Series{ Name = "Test", Data = new Data(chartInfo1) }
})
.SetCredits(new Credits
{
Enabled = false
});
ReportChart.Text = charts.ToHtmlString();
所以我的问题是我需要为五行创建5个对象,或者当行数未知时如何使用当前对象数组创建填充,我是否需要提供for循环来计数,我对此非常困惑。我希望我提供了足够的信息。
由于
答案 0 :(得分:0)
所以看起来你读的每一行都是5个双打,你需要存储在一个数组中。然后你需要保留所有这些行的列表,以便稍后将它们全部传递给图表。
要存储它们,您可以为每一行定义一个专用类,即假设每列具有一定的商业意义。但是,如果只是一个值,比如一个数据点,只需使用双精度数组:
列出chartInfo = new List();
if (reader.HasRows)
{
if (reader.Read())
{
double[] rowData = new double[5];
rowData[0] = Convert.ToDouble(reader.GetValue(1));
...
rowData[4] = Convert.ToDouble(reader.GetValue(5));
}
}
...
现在要使用它们,使用Series
创建一个chartInfo
个对象数组。这可以通过for / foreach循环来完成:
Series[] series = new Series[chartInfo.Length];
for (int i=0; i< chartInfo.Length; i++)
{
series[i] = new Series { Data = chartInfo[i] };
}
或者使用LINQ:
Series[] series = chartInfo.Select(c => new Series {Data = c}).ToArray();
这将帮助您处理尽可能多的行。但请记住,还有一些东西需要弄清楚,比如如何为不同的行显示不同的文本和不同的颜色。