Список полей не отображает данные, когда DataSource задается динамически для ASPxReportDesigner - разработчик веб-отчетов DevExpress
В настоящее время я пытаюсь разработать веб-дизайнер отчетов. Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что я не могу увидеть файл связанного источника данных в конструкторе. Ниже мой код
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);
Где, как dataTable заполняется с использованием листа Excel, так что он содержит столбцы и строки. Даже если я создаю заглушку с данными, ее поля не будут отображаться в конструкторе отчетов.
Я также попытался записать файл.XSD на диск из набора данных и упомянул путь к файлу в качестве параметра DataSoruceSchema. Все еще бесполезно.
На портале DevExpress не так много помощи, как в дизайнере отчетов ASP.NET.
1 ответ
Наконец-то я начал работать с помощью поддержки 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;
}
}
И вам нужно будет зарегистрировать сериализатор в Application_Start в Global.asax
SerializationService.RegisterSerializer(MyDataSerializer.Name, new MyDataSerializer());
Вот решение и пояснение DevEx с кодом поля списка в ASPxReportDesigner не отображается
Но я все еще пытаюсь понять, как работать с наборами данных, которые динамически заполняются из базы данных. Проблема в том, что я не знаю количество и имена таблиц в этом случае. Все еще работаю над этим...