Список полей не отображает данные, когда 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 не отображается

Но я все еще пытаюсь понять, как работать с наборами данных, которые динамически заполняются из базы данных. Проблема в том, что я не знаю количество и имена таблиц в этом случае. Все еще работаю над этим...

Другие вопросы по тегам