Пример #1
0
        protected override void OnGenerateVisibleColumns(VisibleLinesCollection visibleColumnLines)
        {
            this.VisibleColumns.Clear();

            var groupCount = this.DataGrid.View != null ? this.DataGrid.View.GroupDescriptions.Count : 0;
            int startIndex = 0;

            if (this.DataGrid.showRowHeader)
            {
                if (visibleColumnLines.Any(line => line.LineIndex == 0))
                {
                    CreateRowHeaderColumn(startIndex);
                }
                startIndex++;
            }
            if (this.DataGrid.GridModel.HasGroup)
            {
                for (var index = startIndex; index < groupCount + startIndex; index++)
                {
                    if (visibleColumnLines.Any(line => line.LineIndex == index))
                    {
                        this.VisibleColumns.Add(CreateIndentColumn(index));
                    }
                }
            }
            var indentDataColumn = CreateDetailsViewIndentColumn(groupCount + (this.DataGrid.showRowHeader ? 1 : 0));

            this.VisibleColumns.Add(indentDataColumn);
            var dc = CreateDetailsViewContent(groupCount + 1 + (this.DataGrid.showRowHeader ? 1 : 0));

            this.VisibleColumns.Add(dc);
        }
Пример #2
0
        protected override void OnGenerateVisibleColumns(VisibleLinesCollection visibleColumnLines)
        {
            if (visibleColumnLines.Count <= 0)
            {
                return;
            }
            int startColumnIndex;
            int endColumnIndex;

            this.VisibleColumns.Clear();

            if (this.CoveredCells.Count > 0)
            {
                foreach (var coveredCell in this.CoveredCells)
                {
                    int columnHeightIncrementation = 0;
                    columnHeightIncrementation = coveredCell.RowSpan;
                    var dc = CreateColumn(coveredCell, coveredCell.Left, columnHeightIncrementation, coveredCell.Right - coveredCell.Left);
                    this.VisibleColumns.Add(dc);
                }
                int startIndex = 0;

                if (this.DataGrid.ShowRowHeader)
                {
                    this.CreateRowHeaderColumn(startIndex);
                    startIndex++;
                }
                int index;
                // WPF-20041 - Need to increment indent column index
                var compareIndex = this.RowType == Grid.RowType.CaptionCoveredRow ? this.RowLevel + startIndex
                    :(this.DataGrid.View != null ? this.DataGrid.View.GroupDescriptions.Count : 0) + startIndex;
                for (index = startIndex; index < compareIndex; index++)
                {
                    if (!visibleColumnLines.Any(col => col.LineIndex == index))
                    {
                        continue;
                    }

                    this.CreateIndentInCoveredRow(index);
                }
                startIndex = index;

                if (!visibleColumnLines.Any(col => col.LineIndex == index))
                {
                    return;
                }

                if (this.DataGrid.DetailsViewManager.HasDetailsView)
                {
                    if (this.RowIndex < this.DataGrid.StackedHeaderRows.Count)
                    {
                        this.VisibleColumns.Add(this.CreateIndentColumn(startIndex));
                    }
                    else if (this.DataGrid.View != null && (this.RowType == RowType.SummaryRow || this.RowType == RowType.CaptionRow || this.RowType == RowType.TableSummaryRow))
                    {
                        this.VisibleColumns.Add(CreateDetailsViewIndentColumn(startIndex));
                    }
                }

                this.ResetLastColumnBorderThickness(this.VisibleColumns.LastOrDefault(visibleColumn =>
                {
                    if ((visibleColumn.ColumnElement is GridGroupSummaryCell || visibleColumn.ColumnElement is GridTableSummaryCell ||
                         visibleColumn.ColumnElement is GridCaptionSummaryCell) && visibleColumn.ColumnElement.Visibility != Visibility.Collapsed)
                    {
                        return(visibleColumn.ColumnSpan > 0 ? true : (visibleColumn.GridColumn != null && !visibleColumn.GridColumn.IsHidden));
                    }
                    else
                    {
                        return(false);
                    }
                }), true);
            }
            else
            {
                startColumnIndex = visibleColumnLines[visibleColumnLines.FirstBodyVisibleIndex - this.DataGrid.VisualContainer.FrozenColumns].LineIndex;
                endColumnIndex   = visibleColumnLines[visibleColumnLines.LastBodyVisibleIndex].LineIndex;
                for (int index = startColumnIndex; index <= endColumnIndex; index++)
                {
                    if (!visibleColumnLines.Any(col => col.LineIndex == index))
                    {
                        return;
                    }

                    if (index < (this.DataGrid.View != null ? this.DataGrid.View.GroupDescriptions.Count : 0))
                    {
                        this.CreateIndentInCoveredRow(index);
                        continue;
                    }
                    //var dc = CreateColumn(null, index, 0, 0);
                    //dc.IsFixedColumn = false;
                    //this.VisibleColumns.Add(dc);
                    //this.ResetLastColumnBorderThickness(dc, index == endColumnIndex);
                }
            }
        }
Пример #3
0
        internal override void EnsureColumns(VisibleLinesCollection visibleColumnLines)
        {
            this.VisibleColumns.ForEach(dataColumn => dataColumn.IsEnsured = false);
            var groupCount = this.DataGrid.View != null ? this.DataGrid.View.GroupDescriptions.Count : 0;
            int startIndex = 0;

            if (this.DataGrid.showRowHeader)
            {
                if (visibleColumnLines.Any(line => line.LineIndex == 0))
                {
                    var dc = this.VisibleColumns.FirstOrDefault(dataColumn => dataColumn.ColumnIndex == 0);
                    if (dc != null)
                    {
                        dc.IsEnsured = true;
                        if (dc.ColumnVisibility == Visibility.Collapsed)
                        {
                            dc.ColumnVisibility = Visibility.Visible;
                        }
                    }
                    else
                    {
                        CreateRowHeaderColumn(startIndex);
                    }
                }
                startIndex++;
            }
            for (var index = startIndex; index < groupCount + startIndex; index++)
            {
                if (visibleColumnLines.Any(line => line.LineIndex == index))
                {
                    var dc = this.VisibleColumns.FirstOrDefault(dataColumn => dataColumn.ColumnIndex == index);
                    if (dc != null)
                    {
                        dc.IsEnsured = true;
                        if (dc.ColumnVisibility == Visibility.Collapsed)
                        {
                            dc.ColumnVisibility = Visibility.Visible;
                        }
                    }
                    else
                    {
                        this.VisibleColumns.Add(CreateIndentColumn(index));
                    }
                }
            }

            var indentcolumnindex = groupCount + (this.DataGrid.showRowHeader ? 1 : 0);

            if (visibleColumnLines.Any(line => line.LineIndex == indentcolumnindex))
            {
                var indentDataColumn = this.VisibleColumns.FirstOrDefault(dataColumn => dataColumn.ColumnIndex == indentcolumnindex);
                if (indentDataColumn != null)
                {
                    indentDataColumn.IsEnsured = true;
                    if (indentDataColumn.ColumnVisibility == Visibility.Collapsed)
                    {
                        indentDataColumn.ColumnVisibility = Visibility.Visible;
                    }
                }
                else
                {
                    this.VisibleColumns.Add(CreateDetailsViewIndentColumn(groupCount + (this.DataGrid.showRowHeader ? 1 : 0)));
                }
            }

            var detailsViewDataColumn = this.VisibleColumns.FirstOrDefault(dataColumn => dataColumn.ColumnIndex == groupCount + 1 + (this.DataGrid.showRowHeader ? 1 : 0));

            if (detailsViewDataColumn != null)
            {
                detailsViewDataColumn.IsEnsured = true;
                if (detailsViewDataColumn.ColumnVisibility == Visibility.Collapsed)
                {
                    detailsViewDataColumn.ColumnVisibility = Visibility.Visible;
                }
            }
            else
            {
                this.VisibleColumns.Add(CreateDetailsViewContent(groupCount + 1 + (this.DataGrid.showRowHeader ? 1 : 0)));
            }
            this.VisibleColumns.ForEach(column =>
            {
                if (!column.IsEnsured)
                {
                    CollapseColumn(column);
                }
            });
            // WPF-18333 - after clearing all the columns, DetailsViewContentPresenter content will be null. Then if new column is added, its content need to be set here.
            // Also parent grid width should be adjuted based on DetailsViewDataGrid
            if (this.DetailsViewContentPresenter != null && this.DetailsViewContentPresenter.Content == null)
            {
                this.DetailsViewContentPresenter.Content = this.DetailsViewDataGrid;
                if (this.DetailsViewDataGrid.NotifyListener != null)
                {
                    DetailsViewManager.AdjustParentsWidth(this.DetailsViewDataGrid.NotifyListener.GetParentDataGrid(), this.DetailsViewDataGrid);
                }
            }

            if (this.WholeRowElement.ItemsPanel != null)
            {
                this.WholeRowElement.ItemsPanel.InvalidateMeasure();
            }
        }