0

我有这个与 C# 和 ASP.NET 一起使用的 Google Gauge。我尝试使用更新面板每秒刷新一次仪表,但它不起作用。我从 SQL 中获取数据。我只想刷新仪表而不是整个页面。有任何想法吗 ?

aspx

<asp:UpdatePanel ID="UpdatePanelProgressBar" runat="server">
    <ContentTemplate>
      <asp:Literal ID="lt" runat="server"></asp:Literal>
        <asp:Label ID="lblStatus" runat="server"></asp:Label>
    </div>
    <div id="chart_div"></div>
     </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:Timer ID="Timer" Interval="1000" runat="server" OnTick="TimerProgress_Tick">
    </asp:Timer>

aspx.cs

protected void Page_Load(object sender, EventArgs e)
    {

            // here i am calling function  chart_bind(); in the page load event of the page
            chart_bind();

    }

    protected void TimerProgress_Tick(object sender, EventArgs e)
    {
        chart_bind();
     }
    private void chart_bind()
    {
        using (SqlConnection con = new SqlConnection(connStr))
        {
            // here i am using SqlDataAdapter for the sql server select query
            SqlDataAdapter adp = new SqlDataAdapter("SELECT QueueDesc,convert(decimal(18,1),(1.0*GoalMetCount/TotalTickets * 100)) AS GoalMet,  convert(decimal(18,1),100 -(1.0*GoalMetCount/TotalTickets * 100)) AS NotGoalMet FROM vwTodayGoalMet WHERE QueueId = 4", con);
            // here am taking datatable
            DataTable dt = new DataTable();
            try
            {
                // here datatable dt is fill wit the adp
                adp.Fill(dt);
                // this string m catching in the stringbuilder class
                // in the str m writing same javascript code that is given by the google.

                // my data that will come from the sql server
                // below code is same like as google's javascript code
                str.Append(@" <script type='text/javascript'>
    google.load('visualization', '1', {packages:['gauge']});
    google.setOnLoadCallback(drawChart);
    function drawChart() {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Label');
    data.addColumn('number', 'Value');");
                // inside the below line dt.Rows.Count explain that
                // how many rows comes in dt or total rows
                str.Append("data.addRows(" + dt.Rows.Count + ");");

                Int32 i;
                for (i = 0; i <= dt.Rows.Count - 1; i++)
                {
                    // i need this type of output "  data.setValue(0, 0, 'Memory'); so on  in the first line so for this
                    //m using i for the 0,1& 2 and so on . and after this i am writting zero and after this student_name using datatable
                    str.Append("data.setValue( " + i + "," + 0 + "," + "'" + dt.Rows[i]["QueueDesc"].ToString() + "');");
                    // i need this type of output "   data.setValue(0, 1, 80);
                    //so on  in the first line so for this
                    //m using i for the 0,1& 2 and so on . and after this i am writting zero and after this percentage using datatable
                    str.Append("data.setValue(" + i + "," + 1 + "," + dt.Rows[i]["GoalMet"].ToString() + ") ;");


                    //   str.Append("['" + (dt.Rows[i]["student_name"].ToString()) + "'," + dt.Rows[i]["average_marks"].ToString() + "],");
                }

                str.Append("var chart = new google.visualization.Gauge(document.getElementById('chart_div'));");
                // in the below line i am setting the height and width of the Gauge using your own requrirement
                str.Append(" var options = {width: 400, height: 200, redFrom: 1, redTo: 79,greenFrom: 90, greenTo: 100,");
                //  str.Append(" var chart = new google.visualization.BarChart(document.getElementById('chart_div'));");
                str.Append("yellowFrom:80, yellowTo: 89, minorTicks: 5};");
                str.Append(" chart.draw(data, options);}");

                str.Append("</script>");
                lt.Text = str.ToString().TrimEnd(',');

            }

            catch (Exception ex)
            {
                lblStatus.Text = ex.ToString();
            }
        }
    }
4

0 回答 0