我正在尝试将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方法。我没有收到任何错误,仪表板正在显示,但没有任何数据。
答案 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>