Проблема с отображением пустой диаграммы обратного вызова CallBackPanel, если диаграмма добавлена к элементам управления панели в Page_Load

#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.