DotNetHighcharts&;C#:如何加载多维对象数组?
我正在尝试用C#创建一个dotnet highcharts。如果您熟悉dotnot highcharts,那么您知道数据源必须是一个对象。我的数据将来自SQL Server。开始创建时,我创建了一个类,将SQL数据加载到:DotNetHighcharts&;C#:如何加载多维对象数组?,c#,arrays,multidimensional-array,dotnethighcharts,C#,Arrays,Multidimensional Array,Dotnethighcharts,我正在尝试用C#创建一个dotnet highcharts。如果您熟悉dotnot highcharts,那么您知道数据源必须是一个对象。我的数据将来自SQL Server。开始创建时,我创建了一个类,将SQL数据加载到: public class chartDataByGradeByGenderByRace { public string locID { get; set; } public string name { get; set; } public decima
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; }
}
公共类chartDataByGradeByGenderByRace
{
公共字符串locID{get;set;}
公共字符串名称{get;set;}
公共十进制y{get;set;}
公共int tot{get;set;}
公共整数代码{get;set;}
公共图表向下展开向下展开{get;set;}
}
公共类图表向下展开
{
公共字符串名称{get;set;}
公共列表类别{get;set;}
公共列表数据{get;set;}
公共列表totCat{get;set;}
}
将数据加载到类中的My函数:
[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;
}
[WebMethod]
公共列表getChartDataByGradeByGender(字符串性别,int pageID)
{
formValues fv=新的formValues();
字符串personID=fv.personID;
列表ls=新列表();
对象ao=新的chartDataByGradeByGenderByRace();
字符串mySQL=“exec get\u referralPct\u byGrade\u byGender\u byRace@personID,@pageID,@Gender”;
字符串cf=System.Configuration.ConfigurationManager.ConnectionString[“DistrictAssessmentDWConnectionString”]。ConnectionString;
SqlConnection=newsqlconnection(cf);
SqlCommand=newsqlcommand(mySQL,连接);
command.Parameters.AddWithValue(“@personID”,personID);
command.Parameters.AddWithValue(“@pageID”,pageID);
command.Parameters.AddWithValue(“@Gender”,性别);
connection.Open();
SqlDataReader dr=command.ExecuteReader();
字符串名称=null;
chartDataByGradeByGenderByRace cd=新的chartDataByGradeByGenderByRace();
chartDrillDown cdd=新的chartDrillDown();
while(dr.Read())
{
if(name!=dr[“name”].ToString()
{
if(name!=null)
{
cd.drilldown=cdd;
ls.加入(cd);;
}
cd=新的chartDataByGradeByGenderByRace();
cd.drilldown=新图表drilldown();
name=dr[“name”].ToString();
cd.y=Convert.ToDecimal(dr[“y”]);
cd.tot=Convert.ToInt32(dr[“tot”]);
cdd=新图表向下展开();
cdd.categories=新列表();
cdd.data=新列表();
cdd.totCat=新列表();
cdd.name=dr[“name”].ToString();
}
cdd.categories.Add(dr[“categories”].ToString());
cdd.data.Add(Convert.ToDecimal(dr[“data”]);
cdd.totCat.Add(转换为32(dr[“totCat”]);
}
connection.Close();
cd.drilldown=cdd;
ls.加入(cd);;
返回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();
}
protectedvoid getGradeGenderChart()
{
refData rd=新的refData();
列表猫=新列表();
列表男性=新列表();
列表女性=新列表();
字符串locID=schoolArea.Replace(“%”,“D”)+学校级别。Replace(“%”,“L”)+学校ID\u alt.Replace(“%”,“S”);
string id=“refsGradeGender”+locID;
cats=rd.getChartCategories_等级(29,“html”);
男性=rd.GetChartDataByGrade性别(“男性”,29岁);
女性=rd.getChartDataByGradeByGender(“女性”,29岁);
string[]catObject=新字符串[cats.Count];
int-idx=0;
foreach(图表分类猫中的等级猫)
{
catObject[idx++]=cat.grade;
}
DotNet.Highcharts.Highcharts chart=新的DotNet.Highcharts.Highcharts(id)
.InitChart(新图表{DefaultSeriesType=ChartTypes.Column,Height=225})
.SetTitle(新标题)
{
Text=“等级/性别(单击列查看种族)”,
})
.SetYAxis(新YAxis)
{
Title=new YAxisTitle{Text=“%的引用”},
标签=新标签{Enabled=false},
GridLineColor=System.Drawing.Color.Transparent
})
.SetXAxis(新的XAxis{Categories=catObject})
.SetPlotOptions(新的绘图选项
{
Column=新绘图选项Column
{
DataLabels=新绘图选项ColumnDataLabels
{
启用=真,
Formatter=“function(){返回this.y;}”,
Style=“fontwweight:‘bold’”
}
},
系列=新绘图选项系列
{
游标=游标。指针,
点=新绘图选项系列点
{
Events=new plotoptions seriespointevents{Click=“function(){location.href=this.options.url;}”}
}
}
})
.SetSeries(新[]{
新系列{Name=“Males”,Data=newdata(male.ToArray())},
新系列{Name=“Females”,Data=newdata(female.ToArray())}
})
.SetLegend(新的图例{
对齐=水平对齐。左,
浮动=真,
布局=布局。垂直,
填充=2,
垂直对齐=垂直对齐。顶部
})
.SetCredits(新信用{Enabled=false});
refsByGradeByGenderByRace.Text=chart.ToHtmlString();
}
运行此命令时,在代码的最后一行出现以下错误:参数计数不匹配
我已经试过了,知道这个错误是由代码的.SetSeries部分使用male.ToArray()函数引起的。我创造了多恩