使用SQLDataReader在.NET中循环存储过程。使用while循环读取阅读器中的行。在每个循环上创建一个具有uniqueID(int i = 0)的div。从存储过程第一行,第十列检索数据并将值存储在隐藏变量中。然后我调用一个javascript函数在该div中使用该值创建一个图表,然后递增i值。
我注意到在此之后循环进入下一行,隐藏变量被第二行值替换,javascript再次被调用。它看起来像在循环中每次创建一个唯一的div但不调用javascript函数并将图表放在每个唯一的div中。它似乎只把它放在第一个div中,最后只有一个图表,只有读者的最后一个值。
private void ConstructBoxPlot()
{
//currentstatus = txt1.Value;
//currentstatus = currentstatus.Replace("\"", "");
string connectionstring = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
SqlConnection cn = new SqlConnection(connectionstring);
SqlCommand cmd = new SqlCommand("[dbo].cr_fe_KPI_RPT_Summary", cn);
cmd.Parameters.AddWithValue("@SubTeamNo", SubTeam);
cmd.Parameters.AddWithValue("@Month", Month);
cmd.Parameters.AddWithValue("@Year", Year);
cmd.Parameters.AddWithValue("@ReportPeriod", ReportPeriod);
cmd.Parameters.AddWithValue("@controlID", ControlID);
cmd.Parameters.AddWithValue("@PracticeGroupID", PracticeGroup);
cmd.Parameters.AddWithValue("@Instructor", SearchInput.Text);
cmd.Parameters.AddWithValue("@MeasureID", 0);
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.CommandType = CommandType.StoredProcedure;
cn.Open();
SqlDataReader reader = cmd.ExecuteReader();
var chartValues = new List<string>();
var chartValues2 = new List<string>();
int i = 0;
if (reader.HasRows)
{
while (reader.Read())
{
// We create our new div
System.Web.UI.HtmlControls.HtmlGenericControl newDiv = new System.Web.UI.HtmlControls.HtmlGenericControl("DIV");
newDiv.ID = "container" + i; //<---Give and ID to the div, very important!
newDiv.Attributes.Add("class", "pagebr"); //<---Apply a css class if wanted
div2.Controls.Add(newDiv); //<---Add the new div to our already existing div
string name = reader.GetString(0);
if (name != "Total")
{
string str = reader["ChartData"].ToString();
string a = reader["MeasureDesc"].ToString();
string[] strList = str.Split(',');
// convert it in json
dataStr = JsonConvert.SerializeObject(strList, Formatting.None);
hiddenvariable.Value = dataStr;
hiddenvariablemeasuredesc.Value = a;
Page.ClientScript.RegisterStartupScript(this.GetType(), "MyFunc", "CreateBoxPlot(" + i + ");", true);
i = i + 1;
chartValues.Clear();
}
}
}
else
{
}
reader.Close(); // close the reader
cn.Close();
}
javascript(摘录):
function CreateBoxPlot(number){
var hv = $('#hiddenvariable' + number).val();
console.log(hv);
var hvmeasure = $('#hiddenvariablemeasuredesc' + number).val();
console.log(hvmeasure);
var hvtarget = $('#hiddenvariabletarget' + number).val();
var chart;
var titleText = hvmeasure;
//var subTitleText = 'Test Chart Subtitle';
var type = 'boxplot';
var data = [JSON.parse(hv).map(item => parseInt(item))]; //Doesnt work in IE
var id = "container" + number;
console.log(id);
var $container = $("<div id='"+number+"'>").appendTo(document.body);
$(function () {
$(id).highcharts({
chart: { type: type, inverted: true},
title: { text: hvmeasure },
//subtitle: { text: subTitleText },
renderTo: $container,
legend: { enabled: false },
tooltip: {
shared: true,
看起来,您的页面上有一个隐藏元素。您需要为每个元素创建一个新的隐藏元素
System.Web.UI.HtmlControls.HtmlGenericControl newDiv = new System.Web.UI.HtmlControls.HtmlGenericControl("DIV");
创建一个隐藏的控件元素并将其添加到newDiv
元素
System.Web.UI.HtmlControls.HtmlInputHidden hiddenElement = new System.Web.UI.HtmlControls.HtmlInputHidden();
hiddenElement.Id={IDforthisField};
hiddenElement.Value = dataStr; // <--------- Assign the value here
newDiv.Controls.Add(hiddenElement); // <--- Then add to the div element
`
我希望我能回答你的问题