为ASPxReportDesigner动态设置DataSource时,字段列表不显示数据 - DevExpress基于Web的报表设计器

时间:2015-01-26 13:48:27

标签: asp.net 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工作表填充dataTable的位置,因此它包含列和行。即使我创建了一个存根数据表,它的字段也不会出现在报表设计器中。

enter image description here

我还试过在数据集的驱动器上写一个.XSD文件,并提到文件路径为DataSoruceSchema参数。仍然没用。

在ASP.NET报表设计器w.r.t上,DevExpress门户网站上提供了很多帮助。

1 个答案:

答案 0 :(得分:3)

最后,我得到了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());

以下是代码Field List in ASPxReportDesigner is not showing

的解决方案和DevEx说明

但我仍在试图弄清楚如何使用从数据库动态填充的数据集。问题是我不知道那种情况下表的数量和名称。还在努力......