永远不会触发DataLoading事件

时间:2019-05-27 16:07:08

标签: .net devexpress core dashboard

我正在尝试将DashboardObjectDataSource设置到我的仪表板,并且我想捕获DataLoading事件以根据所选的仪表板指定数据。我的问题是永远不会触发DataLoading事件。

我已经尝试订阅这样的活动:

public DataSourceInMemoryStorage CreateDataSourceStorage()
    {
        DataSourceInMemoryStorage dataSourceStorage = new DataSourceInMemoryStorage();

        DashboardObjectDataSource data = new DashboardObjectDataSource();
        data.DataSource = typeof(Data);
        data.Name = "Object Data Source";
        dataSourceStorage.RegisterDataSource("dataSourceObject", data.SaveToXml());
}

public void ConfigureServices(IServiceCollection services)
    {
        services
            .AddMvc()
            .AddDefaultDashboardController(configurator => {
                configurator.SetDashboardStorage(new DataBaseEditaleDashboardStorage(Configuration.GetConnectionString("DashboardStorageConnection")));
                configurator.SetDataSourceStorage(CreateDataSourceStorage());
                configurator.AllowExecutingCustomSql = true;
            });

        services.AddDevExpressControls(settings => settings.Resources = ResourcesType.ThirdParty | ResourcesType.DevExtreme);

        DashboardConfigurator.PassCredentials = false;

        DashboardConfigurator.Default.DataLoading += Default_DataLoading;
    }

private static void Default_DataLoading(object sender, DataLoadingWebEventArgs e)
    {
        if (e.DataSourceName == "Object Data Source")
        {
            e.Data = Data.GetData();
        }
    }

public class Data
{
    public static DataTable GetData()
    {
        DataTable dt = new DataTable();

        string query = "select TOP 1000 * from MyTable";

        SqlConnection conn = new SqlConnection("MyConnectionString");
        SqlCommand cmd = new SqlCommand(query, conn);
        conn.Open();

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        conn.Close();
        da.Dispose();

        return dt;
    }
}

但是我从未能够输入Default_DataLoading方法。我没有收到任何错误,仪表板正在显示,但没有任何数据。

1 个答案:

答案 0 :(得分:0)

似乎是DashboardConfigurator.Default实例引起了问题。而是在AddDefaultDashboardController方法中定义DataLoading事件处理程序:

                configurator.SetDataSourceStorage(CreateDataSourceStorage());
                configurator.AllowExecutingCustomSql = true;
                configurator.DataLoading += (s, e) => {
                    if (e.DataSourceName == "Object Data Source")
                    {
                        e.Data = Data.GetData();
                    }
                };

此外,请检查您的仪表板布局是否包含数据源,该数据源具有在DataLoading事件处理程序中指定的名称(“ 对象数据源”)。如果仪表板没有数据源,则需要使用Web Designer中的Create a New Data Source选项创建一个。

以防万一:使用DevExpress模板库(请参见Create an ASP.NET MVC Dashboard Application)创建的示例Web仪表板应用程序包括对象数据源注册,一旦在设计模式下添加了相应的数据源,该注册就会用数据填充仪表板项目。 / p>