Значение null исключение ссылки на МС управления диаграммы( диаграмма1 имеет значение null)
Я новичок в ms chart я пытаюсь построить столбчатую диаграмму формы jquery (HighChart) и mschart control с помощью vs 2010 с использованием тех же данных
Я могу построить столбчатую диаграмму в jquery(high chart)
но получаю пустой ссылкой исключение на МС управления диаграммы
в моей функции build_chart()
Chart1.DataSource = dt1; // here I am getting null reference exception
я с помощью jQuery AJAX на HTML-кнопку нажать он будет вызывать веб-метод selectRecord()
$.ajax({ type: "POST", url: "Default.aspx/selectRecord", data: '{}', contentType: "application/json;charset=utf-8", dataType: "json", success: OnSuccess, error: OnErrorCall });
<pre> <div> <button id="btn">load chart</button> </div> <form id="form1" runat="server"> <div> <h1>Microsoft Chart</h1> <asp:Chart ID="Chart1" runat="server"><Series><asp:Series Name="Series1"></asp:Series></Series><ChartAreas><asp:ChartArea Name="ChartArea1"></asp:ChartArea></ChartAreas></asp:Chart> </div> <div> <h1>jquery Chart</h1> <div id="container1" style="min-width: 310px; height: 400px; margin: 0 auto"></div> </div> </form>
Что я уже пробовал:
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.Sql; using System.Web.Services; using System.Data.SqlClient; using System.Web.Script.Serialization; using System.Web.UI.DataVisualization.Charting; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Chart1.Series["Series1"].ChartType = SeriesChartType.Column; } [WebMethod] public static string selectRecord() { _Default d = new _Default(); DataTable dt = new DataTable(); SqlConnection conn = new SqlConnection("Data Source=MYSERVER;Initial Catalog=Layout;User ID=admin123;Password=123"); conn.Open(); SqlCommand cmd = new SqlCommand("selectage", conn); cmd.CommandType = CommandType.StoredProcedure; SqlDataAdapter sda = new SqlDataAdapter(cmd); string query = "selectage"; sda.Fill(dt); //d.build_chart(); d.build_chart(query); string result = DataTableToJsonWithJavaScriptSerializer(dt); return result; } public static string DataTableToJsonWithJavaScriptSerializer(DataTable table) { JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); List<Dictionary<string, object>> parentRow = new List<Dictionary<string, object>>(); Dictionary<string, object> childRow; foreach (DataRow row in table.Rows) { childRow = new Dictionary<string, object>(); foreach (DataColumn col in table.Columns) { childRow.Add(col.ColumnName, row[col]); } parentRow.Add(childRow); } return jsSerializer.Serialize(parentRow); } public void build_chart(string query) { try { DataTable dt1 = new DataTable(); //_Default d1 = new _Default(); SqlConnection conn = new SqlConnection("Data Source=MYSERVER;Initial Catalog=Layout;User ID=admin;Password=123"); conn.Open(); SqlCommand cmd = new SqlCommand(query, conn); cmd.CommandType = CommandType.StoredProcedure; SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt1); Chart1.DataSource = dt1; // here i am getting Null Reference Exception Chart1.Series[0].ChartType = SeriesChartType.Column; Chart1.Series[0].XValueMember = "name"; Chart1.Series[0].YValueMembers = "age"; Chart1.DataBind(); } catch (NullReferenceException e) { //eventListener.HandleEvent(Severity.Informational, line.GetType().Name, String.Format("Could not find the customer corresponding to the taxId '{0}' Applicant address will not be imported.", new TaxId(line.TaxId).Masked)); //Response.Write(e.Message); Console.WriteLine(e.Message); } } }
CHill60
Это выглядит так, как будто ваша хранимая процедура selectage
ничего не возвращает
Member 13120628
нет его работает нормально, я отладить мой код, свое способное для того чтобы заполнить объект DataTable ст1
Chart1. DataSource = dt1; / / здесь я получаю исключение нулевой ссылки
есть идеи, почему?
CHill60
Используйте отладчик, чтобы увидеть, является ли Chart1 или dt1 нулевым
Member 13120628
Chart1-это null, почему?
CHill60
Честно говоря, я не знаю почему. Этот код вызывается нажатием кнопки, по-видимому, поэтому страница должна была быть отрисована. Возможно, вы захотите обновить свой вопрос информацией о том, что Chart1 равен нулю - кто-то другой может понять, почему
F-ES Sitecore
Проверьте, является ли Chart1 нулевым. Если ваш код вызывается через AJAX, то это происходит за пределами asp.net жизненный цикл страницы, поэтому вы не можете получить доступ или обновить ее asp.net серверные элементы управления. Вам нужно будет либо использовать UpdatePanel, либо научиться правильно выполнять AJAX и самостоятельно обновлять клиентские компоненты с помощью jQuery.
ZurdoDev
Это решение.
Member 13120628
Диаграмма1 имеет значение null, я могу получить данные в объект DataTable ст1, но некоторые, как он показывает пустую ссылку в Диаграмма1
F-ES Sitecore
Как я уже сказал, если этот код запускается через AJAX, то вы не можете получить доступ к Chart1, он будет нулевым. Эти переменные заполняются только в том случае, если вы сделали обычную обратную передачу, то есть отправили форму.
CHill60
Определенно решение!