#c# #asp.net #ajax #webforms #devexpress
#c# #asp.net #ajax #веб-формы #devexpress
Вопрос:
У меня возникла проблема со страницей WebForms, где, если я привязываю данные к a DevExpress WebChartControl
и добавляю их в a DevExpress ASPxCallBackPanel
в Page_Load, обратный вызов панели отображает пустую диаграмму, когда я вызываю ее через onChange
событие a DropDownList
.
Если я не добавлю диаграмму на панель в Page_Load, CallBack
все работает как ожидалось, и я могу повторно привязать разные наборы данных к диаграмме на основе того, какой выбор выбран из DropDownList
.
Соответствующий код сзади:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<CompanyRecord> companiesList = new List<CompanyRecord>();
List<DataWeekRecord> dataList = new List<DataWeekRecord>();
//Data binding of various controls
WebChartControl testChart_2 = new WebChartControl();
testChart_2.Series.Add(new DevExpress.XtraCharts.Series("Test Series", DevExpress.XtraCharts.ViewType.Line));
testChart_2.Series[0].ArgumentScaleType = DevExpress.XtraCharts.ScaleType.DateTime;
testChart_2.Series[0].ValueScaleType = DevExpress.XtraCharts.ScaleType.Numerical;
testChart_2.Series[0].DataSource = dataList;
testChart_2.Series[0].ArgumentDataMember = "Week";
testChart_2.Series[0].ValueDataMembers.AddRange(new string[] { "PerformanceData" });
testChart_2.Height = panel_bottom.Height;
testChart_2.Width = panel_bottom.Width;
//
//Issue with blank chart rendering on calls to PerformCallback only happens if we add testChart_2
//panel_bottom.Controls.Add(testChart_2);
//
customersDropDown.Attributes.Add("onChange", "panel_bottom.PerformCallback();");
}
Метод, стоящий за обратным вызовом панели:
protected void panel_bottom_callBack(object sender, CallbackEventArgsBase e)
{
string customer_id = customersDropDown.SelectedValue;
List<DataWeekRecord> data = new List<DataWeekRecord>();
//Get new data based on customersDropDown.SelectedValue
WebChartControl wbc = new WebChartControl();
wbc.Series.Add(new DevExpress.XtraCharts.Series("Test Series", DevExpress.XtraCharts.ViewType.Line));
wbc.Series[0].ArgumentScaleType = DevExpress.XtraCharts.ScaleType.DateTime;
wbc.Series[0].ValueScaleType = DevExpress.XtraCharts.ScaleType.Numerical;
wbc.Series[0].DataSource = data;
wbc.Series[0].ArgumentDataMember = "Week";
wbc.Series[0].ValueDataMembers.AddRange(new string[] { "PerformanceData" });
wbc.Width = ASPxCallbackPanel.Width;
wbc.Height = ASPxCallbackPanel.Height;
ASPxCallbackPanel cbp = (ASPxCallbackPanel)sender;
cbp.Controls.Add(wbc);
}
Я в основном изменил шаги, которые я нашел на странице https://documentation.devexpress.com/#AspNet/CustomDocument7555 , но вместо того, чтобы связывать panel.PerformCallback()
его с событием нажатия кнопки, я связал его с DropDownList
onChange
событием на стороне клиента.
Наконец, следует знать, что у меня нет большого опыта работы с интерфейсом.
Ответ №1:
попробуйте вызвать wbc.DataBind() после указания источника данных для диаграммы и перед добавлением ее на панель обратного вызова cbp в обработчике panel_bottom_callBack. Кроме того, похоже, что в testChart_2 отсутствует вызов DataBind() в Page_Load.