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

Posted

技术标签:

【中文标题】sql while循环.net通过隐藏变量解析值到javascript函数以创建图表【英文标题】:sql while loop .net parsing values via a hidden variable to javascript function to create chart 【发布时间】:2019-02-21 20:05:32 【问题描述】:

使用 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 (sn-p):

函数 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,

【问题讨论】:

【参考方案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 
`  

希望我能回答你的问题

【讨论】:

这似乎不起作用 - 我在 .net 代码中创建了一个新的隐藏元素,但 javascript 现在根本不起作用 - 它甚至没有绘制一张图表。也用 javascript 代码更新了我的问题

以上是关于sql while循环.net通过隐藏变量解析值到javascript函数以创建图表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 的 While 循环中设置变量

PL/SQL练习复合变量: 可以一次传递多个值到变量中。

while循环内的表变量每次都没有初始化:SQL Server

Informix SQL 11.5 — 在 while 循环中访问变量

Oracle SQL 中的变量声明、CTE 和 While 循环

在需要计数器时避免 SQL 中的 while 循环