Пример #1
0
 public void SetData(DataSchema dataSchema, ReportResults reportResults, ClusteringSpec clusteringSpec)
 {
     _clusterSpecRows.Clear();
     _clusterSpecRows.AddRange(MakeRows(dataSchema, reportResults, clusteringSpec));
     comboDistanceMetric.SelectedItem =
         ClusterMetricType.FromName(clusteringSpec?.DistanceMetric) ?? ClusterMetricType.DEFAULT;
 }
Пример #2
0
        public ClusteringSpec GetClusteringSpec()
        {
            var clusteringSpec = new ClusteringSpec(_clusterSpecRows.Select(row => new ClusteringSpec.ValueSpec(row.ColumnRef, row.Transform)));

            clusteringSpec =
                clusteringSpec.ChangeDistanceMetric((comboDistanceMetric.SelectedItem as ClusterMetricType)?.Name);
            return(clusteringSpec);
        }
Пример #3
0
 public void ApplyLayout(ViewLayout viewLayout)
 {
     BindingListView.TransformStack = new TransformStack(viewLayout.RowTransforms, 0);
     foreach (var format in viewLayout.ColumnFormats)
     {
         ColumnFormats.SetFormat(format.Item1, format.Item2);
     }
     ClusteringSpec = viewLayout.ClusterSpec;
 }
Пример #4
0
 public void ApplySort(ListSortDescriptionCollection sorts)
 {
     RowFilter = RowFilter.ChangeListSortDescriptionCollection(sorts);
     if (ClusteringSpec != null && sorts.Count > 0)
     {
         ClusteringSpec = ClusteringSpec.RemoveRole(ClusterRole.ROWHEADER);
     }
     // Fire an event so that the NavBar updates to show that the DataGridView is sorting
     OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1));
 }
Пример #5
0
 public ViewLayout ChangeClusterSpec(ClusteringSpec clusterSpec)
 {
     return(ChangeProp(ImClone(this), im => im.ClusterSpec = clusterSpec));
 }
Пример #6
0
        public static ViewLayout ReadXml(XmlReader reader)
        {
            var viewLayout = new ViewLayout(reader.GetAttribute("name"));

            if (reader.IsEmptyElement)
            {
                reader.ReadElementString("layout");
                return(viewLayout);
            }
            reader.Read();
            var            columnFormats = new List <Tuple <ColumnId, ColumnFormat> >();
            var            rowTransforms = new List <IRowTransform>();
            ClusteringSpec clusterSpec   = null;

            while (true)
            {
                if (reader.IsStartElement("columnFormat"))
                {
                    var columnFormat = ColumnFormat.EMPTY;

                    var strWidth = reader.GetAttribute("width");
                    if (strWidth != null)
                    {
                        columnFormat = columnFormat.ChangeWidth(int.Parse(strWidth));
                    }
                    columnFormat = columnFormat.ChangeFormat(reader.GetAttribute("format"));
                    columnFormats.Add(Tuple.Create(ColumnId.ParsePersistedString(reader.GetAttribute("column")), columnFormat));
                    if (reader.IsEmptyElement)
                    {
                        reader.ReadElementString("columnFormat");
                    }
                    else
                    {
                        reader.Skip();
                    }
                }
                else if (reader.IsStartElement("pivot"))
                {
                    rowTransforms.Add(PivotSpec.ReadXml(reader));
                }
                else if (reader.IsStartElement("rowFilter"))
                {
                    rowTransforms.Add(RowFilter.ReadXml(reader));
                }
                else if (reader.IsStartElement("cluster"))
                {
                    clusterSpec = ClusteringSpec.ReadXml(reader);
                }
                else if (reader.NodeType == XmlNodeType.EndElement)
                {
                    reader.ReadEndElement();
                    break;
                }
                else
                {
                    reader.Skip();
                }
            }
            viewLayout.ColumnFormats = ImmutableList.ValueOf(columnFormats);
            viewLayout.RowTransforms = ImmutableList.ValueOf(rowTransforms);
            viewLayout.ClusterSpec   = clusterSpec;
            return(viewLayout);
        }
Пример #7
0
        public IEnumerable <ClusterSpecRow> MakeRows(DataSchema dataSchema, ReportResults reportResults, ClusteringSpec clusteringSpec)
        {
            var pivotedProperties = new PivotedProperties(reportResults.ItemProperties);

            pivotedProperties = pivotedProperties.ChangeSeriesGroups(pivotedProperties.CreateSeriesGroups());
            if (clusteringSpec == null || clusteringSpec.Values.Count == 0)
            {
                clusteringSpec = ClusteringSpec.GetDefaultClusteringSpec(CancellationToken.None, reportResults, pivotedProperties);
            }

            var transforms = clusteringSpec?.ToValueTransformDictionary() ?? new Dictionary <ClusteringSpec.ColumnRef, ClusterRole>();

            foreach (var p in pivotedProperties.UngroupedProperties)
            {
                var columnRef = ClusteringSpec.ColumnRef.FromPropertyDescriptor(p);
                if (columnRef == null)
                {
                    continue;
                }

                var row = new ClusterSpecRow(columnRef, null,
                                             p.ColumnCaption.GetCaption(dataSchema.DataSchemaLocalizer), false, p.PropertyType);
                if (transforms.TryGetValue(columnRef, out ClusterRole transform))
                {
                    row.Transform = transform.Name;
                }

                yield return(row);
            }

            for (int columnGroupIndex = 0; columnGroupIndex < pivotedProperties.SeriesGroups.Count; columnGroupIndex++)
            {
                var group = pivotedProperties.SeriesGroups[columnGroupIndex];
                foreach (var series in group.SeriesList)
                {
                    var columnRef = ClusteringSpec.ColumnRef.FromPivotedPropertySeries(series);
                    if (columnRef == null)
                    {
                        continue;
                    }

                    bool equalInAllRows = true;
                    foreach (var propertyDescriptor in series.PropertyDescriptors)
                    {
                        if (reportResults.RowItems.Select(propertyDescriptor.GetValue)
                            .Where(value => null != value).Distinct().Skip(1).Any())
                        {
                            equalInAllRows = false;
                            break;
                        }
                    }
                    var row = new ClusterSpecRow(columnRef, columnGroupIndex,
                                                 series.SeriesCaption.GetCaption(dataSchema.DataSchemaLocalizer), equalInAllRows,
                                                 series.PropertyType);
                    if (transforms.TryGetValue(columnRef, out ClusterRole transform))
                    {
                        row.Transform = transform.Name;
                    }

                    yield return(row);
                }
            }
        }
Пример #8
0
 public QueryParameters ChangeIsClusteringRequested(ClusteringSpec clusteringSpec)
 {
     return(ChangeProp(ImClone(this), im => im.ClusteringSpec = clusteringSpec));
 }