sql while循环.net通过隐藏变量解析值到javascript函数来创建图表

问题描述 投票:0回答:1

使用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,
javascript c# sql
1个回答
-1
投票

看起来,您的页面上有一个隐藏元素。您需要为每个元素创建一个新的隐藏元素

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 
`  

我希望我能回答你的问题

© www.soinside.com 2019 - 2024. All rights reserved.