2014-09-17 1 views
0

Я новичок в диаграммах флота и больше, чем SQL-разработчик, чем программист на C#. Я пытаюсь, чтобы диаграмма на диаграмме отражала ежемесячные продажи. Кажется, я не могу получить данные на диаграмме. Я искал все для прямого ответа на то, как это работает, и после 4 дней получилось нулевое счастье. Вот что хранимая процедура возвращает:Используйте данные SQL для диаграммы флота с C# и ASP

MonthID SoldCount MonthName 
4  101   Apr 
8  118   Aug 
2  74   Feb 
1  74   Jan 
7  113   Jul 
6  126   Jun 
3  114   Mar 
5  129   May 
9   47   Sep 

Вот мой код за

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 
using System.Text; 
using System.Configuration; 
using SkywebReporter.Classes; 

namespace SkywebReporter 
{ 
    public partial class DefaultObject : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     {   
     } 
     string conn = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString; 
     [System.Web.Services.WebMethod]//public static web method in code behind 
     public static List<PNMACsales> GetData() //int StartRowindex, 
     { 
      List<PNMACsales> myResult = new List<PNMACsales>(); 
      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString)) 
      { 
       //string sqlString = "SelectbyYearTotalProductAssign"; 
       string sqlString = "PNMAC.procReportSalesCounts"; 
       using (SqlCommand cmd = new SqlCommand(sqlString, conn)) 
       { 
        cmd.CommandType = System.Data.CommandType.StoredProcedure; 
        conn.Open(); 
        SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
        while (rdr.Read()) 
        { 
         PNMACsales obj = new PNMACsales(); 
         obj.SoldCount = Convert.ToInt32(rdr["SoldCount"]); 
         obj.MonthName = rdr["MonthName"].ToString(); 
         myResult.Add(obj); 
        } 
        conn.Close(); 
       } 
      } 
      return myResult;    
     }  
    } 
} 

Это мой файл JS Dashboard.js

function DrowChart() { 
    jQuery("#placeholder").html(''); 
    var list12 = []; 
    jQuery.ajax({ 
     type: "POST", 
     url: "DefaultObject.aspx/GetData", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: false, 
     data: "{}", 
     success: function (data) { 
      jQuery.map(data.d, function (item) { 
       var list = []; 
       list.push("'" + item.MonthName + "'"); 
       list.push(item.SoldCount); 
       list12.push(list); 
      }); 
      var plot1 = jQuery.jqplot('chart1', [list12], 

            ); 
     } 
    }); 
} 
+0

Что такое 'Flot Chart', вы имеете в виду' Float Chart' ..? – MethodMan

+0

@DJKRAZE http://www.flotcharts.org –

+0

классный .. никогда не слышал об этом .. угадайте, вы узнаете что-то новое каждый день .. :) спасибо 'Zee Tee' – MethodMan

ответ

0

Предполагая, что вы успешно получаете ответ от своего метода GetData(), вам необходимо сериализовать список, который вы возвращаете из своей функции GetData(). Это связано с тем, что JavaScript не может ничего сделать с C# List. Он должен быть преобразован в строковый формат (JSON), который JS может распознать.

Как некоторые из предложенных комментариев, добавление JSON.Net в ваш проект C# - это простой способ сделать это.

После того, как вы установили Json.NET, вы можете изменить тип возвращаемого GetData() в строку, и выполните следующие действия:

return JsonConvert.SerializeObject(myResult); 

В вашем JavaScript, вам необходимо разобрать сериализированный список :

var list = JSON.parse(data); 

список должен быть проанализирован как массив объектов, которые затем можно перейти в Flot в нужном вам формате.

+0

Теперь я получаю ответ от моего GetData()). Вот код, который сейчас работает. Мне еще нужно добавить сериализатор? [WebMethod] [ScriptMethod (ResponseFormat = ResponseFormat.Json)] общественности статической IEnumerable jsonData() { использованием (OpsDBDataContext DC = новые OpsDBDataContext()) { возврата dc.ReportSalesCounts(). ToList() ; } } – aaron

0

При работе с датами в FlotChart, вы хотите вернуть дату в отметках времени UNIX, умноженных на 1000, используя этот код ASP, чтобы отфильтровать даты вашего возвращения на флот:

DateDiff("s","01/01/1970",MyDate)*1000 

Это дает FlotChart, как он этого хочет, поэтому вы можете использовать все функции даты, которые он предлагает. Когда вы это сделаете, он напишет даты для вас и имена месяцев и т. Д.

Не видя данных JSON, вы загружаете блок-схему, вам нелегко понять, где ваши ошибки, но поскольку вы используя даты, это должно быть одно из них.

+0

Данные JSON будут возвращены из хранимой процедуры выше. Он имеет MonthID (int), SoldCount (int), MonthName (строка). Я не могу получить JSON для генерации, который является частью моей проблемы. Спасибо, что ответили. Супер разочарован прямо сейчас. – aaron

+0

Возможно, вы захотите создать свой объект JSON. Я нашел пакет JSON.Net для этого полезного. –

+0

Вы все еще можете извлекать данные JSON, с которыми работает график (с помощью firebug и т. Д.) И размещать его здесь, вот что поможет решить проблему. –