我正在尝试在 C# 中创建一个 dotnet highcharts。如果您熟悉 dotnot highcharts,那么您就会知道数据源必须是一个对象。我的数据将来自 SQL Server。当我最初开始创建它时,我创建了一个类来将 SQL 数据加载到:
public class chartDataByGradeByGenderByRace
{
public string locID { get; set; }
public string name { get; set; }
public decimal y { get; set; }
public int tot { get; set; }
public int code { get; set; }
public chartDrillDown drilldown { get; set; }
}
public class chartDrillDown
{
public string name { get; set; }
public List<string> categories { get; set; }
public List<decimal> data { get; set; }
public List<int> totCat { get; set; }
}
我将数据加载到类中的函数:
[WebMethod]
public List<chartDataByGradeByGenderByRace> getChartDataByGradeByGender(string gender, int pageID)
{
formValues fv = new formValues();
string personID = fv.personID;
List<chartDataByGradeByGenderByRace> ls = new List<chartDataByGradeByGenderByRace>();
object ao = new chartDataByGradeByGenderByRace();
string mySQL = "exec get_referralPct_byGrade_byGender_byRace @personID, @pageID, @Gender";
string cf = System.Configuration.ConfigurationManager.ConnectionStrings["DistrictAssessmentDWConnectionString"].ConnectionString;
SqlConnection connection = new SqlConnection(cf);
SqlCommand command = new SqlCommand(mySQL, connection);
command.Parameters.AddWithValue("@personID", personID);
command.Parameters.AddWithValue("@pageID", pageID);
command.Parameters.AddWithValue("@Gender", gender);
connection.Open();
SqlDataReader dr = command.ExecuteReader();
string name = null;
chartDataByGradeByGenderByRace cd = new chartDataByGradeByGenderByRace();
chartDrillDown cdd = new chartDrillDown();
while (dr.Read())
{
if (name != dr["name"].ToString())
{
if (name != null)
{
cd.drilldown = cdd;
ls.Add(cd);
}
cd = new chartDataByGradeByGenderByRace();
cd.drilldown = new chartDrillDown();
name = dr["name"].ToString();
cd.y = Convert.ToDecimal(dr["y"]);
cd.tot = Convert.ToInt32(dr["tot"]);
cdd = new chartDrillDown();
cdd.categories = new List<string>();
cdd.data = new List<decimal>();
cdd.totCat = new List<int>();
cdd.name = dr["name"].ToString();
}
cdd.categories.Add(dr["categories"].ToString());
cdd.data.Add(Convert.ToDecimal(dr["data"]));
cdd.totCat.Add(Convert.ToInt32(dr["totCat"]));
}
connection.Close();
cd.drilldown = cdd;
ls.Add(cd);
return ls;
}
还有我构建 dotnet highcharts 的方法:
protected void getGradeGenderChart()
{
refData rd = new refData();
List<chartCategoriesGrade> cats = new List<chartCategoriesGrade>();
List<chartDataByGradeByGenderByRace> male = new List<chartDataByGradeByGenderByRace>();
List<chartDataByGradeByGenderByRace> female = new List<chartDataByGradeByGenderByRace>();
string locID = schoolArea.Replace("%", "D") + schoolLevel.Replace("%", "L") + schoolID_alt.Replace("%", "S");
string id = "refsGradeGender" + locID;
cats = rd.getChartCategories_Grade(29, "html");
male = rd.getChartDataByGradeByGender("Male", 29);
female = rd.getChartDataByGradeByGender("Female", 29);
string[] catObject = new string[cats.Count];
int idx = 0;
foreach (chartCategoriesGrade cat in cats)
{
catObject[idx++] = cat.grade;
}
DotNet.Highcharts.Highcharts chart = new DotNet.Highcharts.Highcharts(id)
.InitChart(new Chart { DefaultSeriesType = ChartTypes.Column, Height = 225 })
.SetTitle(new Title
{
Text = "Grade/Gender (Click columns to view Races)",
})
.SetYAxis(new YAxis
{
Title = new YAxisTitle { Text = "% of Referrals" },
Labels = new YAxisLabels { Enabled = false },
GridLineColor = System.Drawing.Color.Transparent
})
.SetXAxis(new XAxis { Categories = catObject })
.SetPlotOptions(new PlotOptions
{
Column = new PlotOptionsColumn
{
DataLabels = new PlotOptionsColumnDataLabels
{
Enabled = true,
Formatter = "function() { return this.y; }",
Style = "fontWeight: 'bold'"
}
},
Series = new PlotOptionsSeries
{
Cursor = Cursors.Pointer,
Point = new PlotOptionsSeriesPoint
{
Events = new PlotOptionsSeriesPointEvents { Click = "function() { location.href = this.options.url; }" }
}
}
})
.SetSeries(new[] {
new Series { Name= "Males", Data = new Data(male.ToArray()) },
new Series { Name = "Females", Data = new Data(female.ToArray()) }
})
.SetLegend(new Legend {
Align = HorizontalAligns.Left,
Floating = true,
Layout = Layouts.Vertical,
Padding = 2,
VerticalAlign = VerticalAligns.Top
})
.SetCredits(new Credits { Enabled = false });
refsByGradeByGenderByRace.Text = chart.ToHtmlString();
}
当我运行它时,我在最后一行代码中收到以下错误:Parameter count mismatch。
我玩过,知道错误是由代码的 .SetSeries 部分引起的,使用了 male.ToArray() 函数。在使用此方法之前,我已经创建了 dotnet highcharts,但在这些情况下,被转换的类没有子类。我不知道问题是否在于使用 ToArray() 没有将子类转换为对象或什么。
如我所见,我有两个选择:1) 只需在开始时将 SQL 数据加载到 Object 数组中,然后将其传递过来;或者 2) 将类转换为多维对象并在 .Set Series 部分中使用它。不幸的是,我不知道该怎么做。我读过的所有示例都只处理非常简单的数组,但我没有找到任何内容显示如何创建具有不同值的数组、如何为这些值创建名称、如何执行多维部分等等。
如果有人能教我如何在这个上钓鱼,我会非常非常感激:(