Well, I found the solution to the problem. The requirements for using the CustomData property are this: A) In the CustomReportItemDesigner class (your custom class which inherits from it as a base), override the InitializeNewComponent() method like this: public override void InitializeNewComponent() { base.InitializeNewComponent(); CustomData = new CustomData(); //at least one grouping is required for both rows and columns //initialize a static row grouping CustomData.DataRowGroupings = new DataRowGroupings(); CustomData.DataRowGroupings.DataGroupings = new List<DataGrouping>(1); CustomData.DataRowGroupings.DataGroupings.Add(new DataGrouping()); CustomData.DataRowGroupings.DataGroupings[0].Static = true; // initialize a Static column grouping CustomData.DataColumnGroupings = new DataColumnGroupings(); CustomData.DataColumnGroupings.DataGroupings = new List<DataGrouping>(1); CustomData.DataColumnGroupings.DataGroupings.Add(new DataGrouping()); CustomData.DataColumnGroupings.DataGroupings[0].Static = true; //initialize data row with empty values for designer CustomData.DataRows = new List<DataRow>(1); CustomData.DataRows.Add(new DataRow()); CustomData.DataRows[0].Add(new DataCell()); //define the fields you will store (these will be populated with expressions by custom designer properties you define) CustomData.DataRows[0][0].Add(new DataValue("Label", String.Empty)); CustomData.DataRows[0][0].Add(new DataValue("X", String.Empty)); CustomData.DataRows[0][0].Add(new DataValue("Y", String.Empty)); } B) Define custom designer properties to set the expressions for the DataValuesCollection (only showing one property here to keep things shorter) [Browsable(true), Category("Data")] public string XValue { get { if (CustomData.DataRows.Count > 0 && CustomData.DataRows[0].Count > 0) return GetDataValue(CustomData.DataRows[0][0], "X"); else return "X Coordinate"; } set { SetDataValue(CustomData.DataRows[0][0], "X", value); } } private string GetDataValue(DataCell cell, string name) { foreach (DataValue value in cell) if (value.Name == name) return value.Value; return null; } private void SetDataValue(DataCell cell, string name, string expression) { foreach (DataValue value in cell) if (value.Name == name) { value.Value = expression; return; } DataValue datavalue = new DataValue(name, expression); cell.Add(dat