为 ASPxReportDesigner - DevExpress 基于 Web 的报表设计器动态设置数据源时,字段列表不显示数据
Field List is not showing data when DataSource is set dynamically for ASPxReportDesigner - Web based report desginer by DevExpress
我目前正在尝试开发基于 Web 的报表设计器。我目前面临的问题是我无法在设计器中看到绑定数据源的字段。以下是我的代码
DataSet ds = new DataSet();
ds.DataSetName = "Data Set";
ds.Tables.Add(dataTable);
var report = new XtraReport();
report.DataSource = ds;
report.DataMember = ds.Tables[0].TableName;// "ExcelParser Data"
ASPxReportDesigner1.OpenReport(report);
因为数据表是使用 excel sheet 填充的,所以它包含列和行。即使我创建了一个存根数据表,它的字段也不会显示在报表设计器中。
我也尝试过从数据集在驱动器上写一个 .XSD 文件,并提到文件路径作为 DataSoruceSchema 参数。还是没用。
DevExpress 门户上没有太多可用的帮助 w.r.t ASP.NET 报表设计器。
在 DevEx 支持的帮助下,我终于让它工作了。在 运行 时间创建的数据集似乎需要自定义数据集序列化程序才能工作。
现在是更新后的代码
XtraReport report = new XtraReport();
report.Extensions[SerializationService.Guid] = MyDataSerializer.Name;
report.DataSource = MyDataSerializer.GenerateActorMembers();
report.DataMember = "Actor Members";
ASPxReportDesigner1.OpenReport(report);
这是为我的数据更新的自定义序列化程序
public class MyDataSerializer : IDataSerializer {
public const string Name = "MyDataSerializer";
public bool CanSerialize(object data, object extensionProvider) {
return data is DataSet;
}
public string Serialize(object data, object extensionProvider) {
var ds = (DataSet)data;
return ds.DataSetName;
}
public bool CanDeserialize(string value, string typeName, object extensionProvider) {
return value == "Members";
}
public object Deserialize(string value, string typeName, object extensionProvider) {
if(value == "Members") {
return GenerateActorMembers();
}
return null;
}
public static DataSet GenerateActorMembers() {
var dt = new DataTable();
dt.TableName = "Actor Members";
dt.Columns.Add("MemberId");
dt.Columns.Add("MemberName");
dt.Columns.Add("MemberDOB");
dt.Columns.Add("MemberAddress");
dt.Rows.Add(dt.NewRow());// Rows.Add(new DataRow());
dt.Rows[0]["MemberId"] = "1";
dt.Rows[0]["MemberName"] = "George Clooney";
dt.Rows[0]["MemberDOB"] = "1960/01/02";
dt.Rows[0]["MemberAddress"] = "NY, NY, USA";
dt.Rows.Add(dt.NewRow());
dt.Rows[1]["MemberId"] = "2";
dt.Rows[1]["MemberName"] = "Reober Deniro";
dt.Rows[1]["MemberDOB"] = "1958/01/02";
dt.Rows[1]["MemberAddress"] = "NY, NY, USA";
dt.Rows.Add(dt.NewRow());
dt.Rows[2]["MemberId"] = "3";
dt.Rows[2]["MemberName"] = "Clive Owen";
dt.Rows[2]["MemberDOB"] = "1965/01/02";
dt.Rows[2]["MemberAddress"] = "London, London, UK";
dt.Rows.Add(dt.NewRow());
dt.Rows[3]["MemberId"] = "4";
dt.Rows[3]["MemberName"] = "Clive Owen";
dt.Rows[3]["MemberDOB"] = "1965/01/02";
dt.Rows[3]["MemberAddress"] = "London, London, UK";
var ds = new DataSet();
ds.Tables.Add(dt);
ds.DataSetName = "Members";
return ds;
}
}
并且您需要在 Global.asax Application_Start
中注册序列化程序
SerializationService.RegisterSerializer(MyDataSerializer.Name, new MyDataSerializer());
这里是解决方案和 DevEx 解释代码 Field List in ASPxReportDesigner is not showing
但我仍在尝试弄清楚如何使用从数据库动态填充的数据集。问题是在那种情况下我不知道表的数量和名称。仍在努力...
我目前正在尝试开发基于 Web 的报表设计器。我目前面临的问题是我无法在设计器中看到绑定数据源的字段。以下是我的代码
DataSet ds = new DataSet();
ds.DataSetName = "Data Set";
ds.Tables.Add(dataTable);
var report = new XtraReport();
report.DataSource = ds;
report.DataMember = ds.Tables[0].TableName;// "ExcelParser Data"
ASPxReportDesigner1.OpenReport(report);
因为数据表是使用 excel sheet 填充的,所以它包含列和行。即使我创建了一个存根数据表,它的字段也不会显示在报表设计器中。
我也尝试过从数据集在驱动器上写一个 .XSD 文件,并提到文件路径作为 DataSoruceSchema 参数。还是没用。
DevExpress 门户上没有太多可用的帮助 w.r.t ASP.NET 报表设计器。
在 DevEx 支持的帮助下,我终于让它工作了。在 运行 时间创建的数据集似乎需要自定义数据集序列化程序才能工作。 现在是更新后的代码
XtraReport report = new XtraReport();
report.Extensions[SerializationService.Guid] = MyDataSerializer.Name;
report.DataSource = MyDataSerializer.GenerateActorMembers();
report.DataMember = "Actor Members";
ASPxReportDesigner1.OpenReport(report);
这是为我的数据更新的自定义序列化程序
public class MyDataSerializer : IDataSerializer {
public const string Name = "MyDataSerializer";
public bool CanSerialize(object data, object extensionProvider) {
return data is DataSet;
}
public string Serialize(object data, object extensionProvider) {
var ds = (DataSet)data;
return ds.DataSetName;
}
public bool CanDeserialize(string value, string typeName, object extensionProvider) {
return value == "Members";
}
public object Deserialize(string value, string typeName, object extensionProvider) {
if(value == "Members") {
return GenerateActorMembers();
}
return null;
}
public static DataSet GenerateActorMembers() {
var dt = new DataTable();
dt.TableName = "Actor Members";
dt.Columns.Add("MemberId");
dt.Columns.Add("MemberName");
dt.Columns.Add("MemberDOB");
dt.Columns.Add("MemberAddress");
dt.Rows.Add(dt.NewRow());// Rows.Add(new DataRow());
dt.Rows[0]["MemberId"] = "1";
dt.Rows[0]["MemberName"] = "George Clooney";
dt.Rows[0]["MemberDOB"] = "1960/01/02";
dt.Rows[0]["MemberAddress"] = "NY, NY, USA";
dt.Rows.Add(dt.NewRow());
dt.Rows[1]["MemberId"] = "2";
dt.Rows[1]["MemberName"] = "Reober Deniro";
dt.Rows[1]["MemberDOB"] = "1958/01/02";
dt.Rows[1]["MemberAddress"] = "NY, NY, USA";
dt.Rows.Add(dt.NewRow());
dt.Rows[2]["MemberId"] = "3";
dt.Rows[2]["MemberName"] = "Clive Owen";
dt.Rows[2]["MemberDOB"] = "1965/01/02";
dt.Rows[2]["MemberAddress"] = "London, London, UK";
dt.Rows.Add(dt.NewRow());
dt.Rows[3]["MemberId"] = "4";
dt.Rows[3]["MemberName"] = "Clive Owen";
dt.Rows[3]["MemberDOB"] = "1965/01/02";
dt.Rows[3]["MemberAddress"] = "London, London, UK";
var ds = new DataSet();
ds.Tables.Add(dt);
ds.DataSetName = "Members";
return ds;
}
}
并且您需要在 Global.asax Application_Start
中注册序列化程序SerializationService.RegisterSerializer(MyDataSerializer.Name, new MyDataSerializer());
这里是解决方案和 DevEx 解释代码 Field List in ASPxReportDesigner is not showing
但我仍在尝试弄清楚如何使用从数据库动态填充的数据集。问题是在那种情况下我不知道表的数量和名称。仍在努力...