예제 #1
0
 protected internal override string GetErrorText(int rowIndex)
 {
     if (OwningRow == null)
     {
         return(base.GetErrorText(rowIndex));
     }
     else
     {
         return(OwningRow.GetErrorText(rowIndex));
     }
 }
예제 #2
0
        protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize)
        {
            if (DataGridView == null)
            {
                return(new Size(-1, -1));
            }

            if (cellStyle == null)
            {
                throw new ArgumentNullException(nameof(cellStyle));
            }

            DataGridViewAdvancedBorderStyle dgvabsPlaceholder = new DataGridViewAdvancedBorderStyle(), dgvabsEffective;

            dgvabsEffective = OwningRow.AdjustRowHeaderBorderStyle(DataGridView.AdvancedRowHeadersBorderStyle,
                                                                   dgvabsPlaceholder,
                                                                   false /*singleVerticalBorderAdded*/,
                                                                   false /*singleHorizontalBorderAdded*/,
                                                                   false /*isFirstDisplayedRow*/,
                                                                   false /*isLastVisibleRow*/);
            Rectangle borderWidthsRect = BorderWidths(dgvabsEffective);
            int       borderAndPaddingWidths = borderWidthsRect.Left + borderWidthsRect.Width + cellStyle.Padding.Horizontal;
            int       borderAndPaddingHeights = borderWidthsRect.Top + borderWidthsRect.Height + cellStyle.Padding.Vertical;

            TextFormatFlags flags = DataGridViewUtilities.ComputeTextFormatFlagsForCellStyleAlignment(DataGridView.RightToLeftInternal, cellStyle.Alignment, cellStyle.WrapMode);

            if (DataGridView.ApplyVisualStylesToHeaderCells)
            {
                // Add the theming margins to the borders.
                Rectangle rectThemeMargins = DataGridViewHeaderCell.GetThemeMargins(graphics);
                borderAndPaddingWidths  += rectThemeMargins.Y;
                borderAndPaddingWidths  += rectThemeMargins.Height;
                borderAndPaddingHeights += rectThemeMargins.X;
                borderAndPaddingHeights += rectThemeMargins.Width;
            }

            // Intentionally not using GetFormattedValue because header cells don't typically perform formatting.
            object val = GetValue(rowIndex);

            if (!(val is string))
            {
                val = null;
            }
            return(DataGridViewUtilities.GetPreferredRowHeaderSize(graphics,
                                                                   (string)val,
                                                                   cellStyle,
                                                                   borderAndPaddingWidths,
                                                                   borderAndPaddingHeights,
                                                                   DataGridView.ShowRowErrors,
                                                                   true /*showGlyph*/,
                                                                   constraintSize,
                                                                   flags));
        }
예제 #3
0
 protected override Size GetSize(int rowIndex)
 {
     if (DataGridView == null)
     {
         // detached cell
         if (rowIndex != -1)
         {
             throw new ArgumentOutOfRangeException(nameof(rowIndex));
         }
         return(new Size(-1, -1));
     }
     if (OwningColumn != null)
     {
         // must be a column header cell
         if (rowIndex != -1)
         {
             throw new ArgumentOutOfRangeException(nameof(rowIndex));
         }
         return(new Size(OwningColumn.Thickness, DataGridView.ColumnHeadersHeight));
     }
     else if (OwningRow != null)
     {
         // must be a row header cell
         if (rowIndex < 0 || rowIndex >= DataGridView.Rows.Count)
         {
             throw new ArgumentOutOfRangeException(nameof(rowIndex));
         }
         if (DataGridView.Rows.SharedRow(rowIndex) != OwningRow)
         {
             throw new ArgumentException(string.Format(SR.InvalidArgument, nameof(rowIndex), rowIndex));
         }
         return(new Size(DataGridView.RowHeadersWidth, OwningRow.GetHeight(rowIndex)));
     }
     else
     {
         // must be the top left header cell
         if (rowIndex != -1)
         {
             throw new ArgumentOutOfRangeException(nameof(rowIndex));
         }
         return(new Size(DataGridView.RowHeadersWidth, DataGridView.ColumnHeadersHeight));
     }
 }
예제 #4
0
        public override DataGridViewElementStates GetInheritedState(int rowIndex)
        {
            DataGridViewElementStates state = DataGridViewElementStates.ResizableSet | DataGridViewElementStates.ReadOnly;

            if (OwningRow != null)
            {
                // row header cell
                if ((DataGridView == null && rowIndex != -1) ||
                    (DataGridView != null && (rowIndex < 0 || rowIndex >= DataGridView.Rows.Count)))
                {
                    throw new ArgumentException(string.Format(SR.InvalidArgument, nameof(rowIndex), rowIndex));
                }
                if (DataGridView != null && DataGridView.Rows.SharedRow(rowIndex) != OwningRow)
                {
                    throw new ArgumentException(string.Format(SR.InvalidArgument, nameof(rowIndex), rowIndex));
                }
                state |= (OwningRow.GetState(rowIndex) & DataGridViewElementStates.Frozen);
                if (OwningRow.GetResizable(rowIndex) == DataGridViewTriState.True || (DataGridView != null && DataGridView.RowHeadersWidthSizeMode == DataGridViewRowHeadersWidthSizeMode.EnableResizing))
                {
                    state |= DataGridViewElementStates.Resizable;
                }
                if (OwningRow.GetVisible(rowIndex) && (DataGridView == null || DataGridView.RowHeadersVisible))
                {
                    state |= DataGridViewElementStates.Visible;
                    if (OwningRow.GetDisplayed(rowIndex))
                    {
                        state |= DataGridViewElementStates.Displayed;
                    }
                }
            }
            else if (OwningColumn != null)
            {
                // column header cell
                if (rowIndex != -1)
                {
                    throw new ArgumentOutOfRangeException(nameof(rowIndex));
                }
                state |= (OwningColumn.State & DataGridViewElementStates.Frozen);
                if (OwningColumn.Resizable == DataGridViewTriState.True ||
                    (DataGridView != null && DataGridView.ColumnHeadersHeightSizeMode == DataGridViewColumnHeadersHeightSizeMode.EnableResizing))
                {
                    state |= DataGridViewElementStates.Resizable;
                }
                if (OwningColumn.Visible && (DataGridView == null || DataGridView.ColumnHeadersVisible))
                {
                    state |= DataGridViewElementStates.Visible;
                    if (OwningColumn.Displayed)
                    {
                        state |= DataGridViewElementStates.Displayed;
                    }
                }
            }
            else if (DataGridView != null)
            {
                // top left header cell
                if (rowIndex != -1)
                {
                    throw new ArgumentOutOfRangeException(nameof(rowIndex));
                }
                state |= DataGridViewElementStates.Frozen;
                if (DataGridView.RowHeadersWidthSizeMode == DataGridViewRowHeadersWidthSizeMode.EnableResizing || DataGridView.ColumnHeadersHeightSizeMode == DataGridViewColumnHeadersHeightSizeMode.EnableResizing)
                {
                    state |= DataGridViewElementStates.Resizable;
                }
                if (DataGridView.RowHeadersVisible && DataGridView.ColumnHeadersVisible)
                {
                    state |= DataGridViewElementStates.Visible;
                    if (DataGridView.LayoutInfo.TopLeftHeader != Rectangle.Empty)
                    {
                        state |= DataGridViewElementStates.Displayed;
                    }
                }
            }

#if DEBUG
            if (OwningRow == null || OwningRow.Index != -1)
            {
                DataGridViewElementStates stateDebug = DataGridViewElementStates.ResizableSet;
                if (Displayed)
                {
                    stateDebug |= DataGridViewElementStates.Displayed;
                }
                if (Frozen)
                {
                    stateDebug |= DataGridViewElementStates.Frozen;
                }
                if (ReadOnly)
                {
                    stateDebug |= DataGridViewElementStates.ReadOnly;
                }
                if (Resizable)
                {
                    stateDebug |= DataGridViewElementStates.Resizable;
                }
                if (Selected)
                {
                    stateDebug |= DataGridViewElementStates.Selected;
                }
                if (Visible)
                {
                    stateDebug |= DataGridViewElementStates.Visible;
                }
                Debug.Assert(state == stateDebug);
            }
#endif

            return(state);
        }