private bool AutoResizeColumnInternal(int columnIndex, DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaInternal, bool fixedHeight)
        {
            Debug.Assert(autoSizeColumnCriteriaInternal == DataGridViewAutoSizeColumnCriteriaInternal.Header ||
                autoSizeColumnCriteriaInternal == DataGridViewAutoSizeColumnCriteriaInternal.AllRows ||
                autoSizeColumnCriteriaInternal == DataGridViewAutoSizeColumnCriteriaInternal.DisplayedRows ||
                autoSizeColumnCriteriaInternal == (DataGridViewAutoSizeColumnCriteriaInternal.Header | DataGridViewAutoSizeColumnCriteriaInternal.AllRows) ||
                autoSizeColumnCriteriaInternal == (DataGridViewAutoSizeColumnCriteriaInternal.Header | DataGridViewAutoSizeColumnCriteriaInternal.DisplayedRows));
            Debug.Assert(columnIndex >= 0 && columnIndex < this.Columns.Count);
            Debug.Assert(autoSizeColumnCriteriaInternal != DataGridViewAutoSizeColumnCriteriaInternal.Header || this.ColumnHeadersVisible);

            if (!this.IsHandleCreated)
            {
                // auto sizing causes handle creation.
                // don't create the handle inside InitializeComponent because that causes problems w/ data binding
                this.dataGridViewState2[DATAGRIDVIEWSTATE2_autoSizedWithoutHandle] = true;
                return false;
            }

            bool ret = false; // No autosizing occurs by default.
            try
            {
                this.noAutoSizeCount++;
                // Use of WindowsFormsUtils.CreateMeasurementGraphics() avoid use of this.Handle
                // IntPtr handle = this.Handle; // Force creation of control's handle because for databound grids, handle creation wipes out and recreates the columns.
                // Note: Even none-resizable column can programmatically be resized.
                DataGridViewColumn dataGridViewColumn = this.Columns[columnIndex];
                int preferredColumnWidth = dataGridViewColumn.GetPreferredWidth((DataGridViewAutoSizeColumnMode) autoSizeColumnCriteriaInternal, fixedHeight);
                if (preferredColumnWidth < dataGridViewColumn.MinimumThickness)
                {
                    preferredColumnWidth = dataGridViewColumn.MinimumThickness;
                }
                if (preferredColumnWidth > DataGridViewBand.maxBandThickness)
                {
                    preferredColumnWidth = DataGridViewBand.maxBandThickness;
                }
                if (preferredColumnWidth != dataGridViewColumn.Thickness)
                {
                    if (dataGridViewColumn.InheritedAutoSizeMode == DataGridViewAutoSizeColumnMode.Fill)
                    {
                        AdjustFillingColumn(dataGridViewColumn, preferredColumnWidth);
                    }
                    else
                    {
                        this.Columns[columnIndex].ThicknessInternal = preferredColumnWidth;
                    }
                    ret = true;
                }
            }
            finally
            {
                Debug.Assert(this.noAutoSizeCount > 0);
                this.noAutoSizeCount--;
            }
            return ret;
        }
        private bool AdjustExpandingColumns(DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaFilter, int rowIndex)
        {
            Debug.Assert(autoSizeColumnCriteriaFilter != DataGridViewAutoSizeColumnCriteriaInternal.None);
            Debug.Assert((autoSizeColumnCriteriaFilter & DataGridViewAutoSizeColumnCriteriaInternal.Fill) == 0);

            bool ret = false; // No column autosizes by default
            DataGridViewColumn dataGridViewColumn = this.Columns.GetFirstColumn(DataGridViewElementStates.Visible);
            while (dataGridViewColumn != null)
            {
                DataGridViewAutoSizeColumnCriteriaInternal inheritedAutoSizeColumnCriteria = (DataGridViewAutoSizeColumnCriteriaInternal)dataGridViewColumn.InheritedAutoSizeMode;
                DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaFiltered = (inheritedAutoSizeColumnCriteria & autoSizeColumnCriteriaFilter);
                if (autoSizeColumnCriteriaFiltered != 0)
                {
                    ret |= AdjustExpandingColumn(dataGridViewColumn, rowIndex);
                }
                dataGridViewColumn = this.Columns.GetNextColumn(dataGridViewColumn,
                    DataGridViewElementStates.Visible,
                    DataGridViewElementStates.None);
            }
            return ret;
        }
        private bool AutoResizeAllVisibleColumnsInternal(DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaFilter, bool fixedHeight)
        {
            Debug.Assert(autoSizeColumnCriteriaFilter != DataGridViewAutoSizeColumnCriteriaInternal.None);
            Debug.Assert((autoSizeColumnCriteriaFilter & DataGridViewAutoSizeColumnCriteriaInternal.Fill) == 0);

            bool ret = false; // No column autosizes by default
            DataGridViewColumn dataGridViewColumn = this.Columns.GetFirstColumn(DataGridViewElementStates.Visible);
            while (dataGridViewColumn != null)
            {
                DataGridViewAutoSizeColumnCriteriaInternal inheritedAutoSizeColumnCriteria = (DataGridViewAutoSizeColumnCriteriaInternal) dataGridViewColumn.InheritedAutoSizeMode;
                DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaFiltered = (inheritedAutoSizeColumnCriteria & autoSizeColumnCriteriaFilter);
                if (autoSizeColumnCriteriaFiltered != 0)
                {
                    ret |= AutoResizeColumnInternal(dataGridViewColumn.Index, inheritedAutoSizeColumnCriteria, fixedHeight);
                }
                dataGridViewColumn = this.Columns.GetNextColumn(dataGridViewColumn,
                    DataGridViewElementStates.Visible,
                    DataGridViewElementStates.None);
            }
            return ret;
        }
 public virtual int GetPreferredWidth(DataGridViewAutoSizeColumnMode autoSizeColumnMode, bool fixedHeight)
 {
     if (((autoSizeColumnMode == DataGridViewAutoSizeColumnMode.NotSet) || (autoSizeColumnMode == DataGridViewAutoSizeColumnMode.None)) || (autoSizeColumnMode == DataGridViewAutoSizeColumnMode.Fill))
     {
         throw new ArgumentException(System.Windows.Forms.SR.GetString("DataGridView_NeedColumnAutoSizingCriteria", new object[] { "autoSizeColumnMode" }));
     }
     switch (autoSizeColumnMode)
     {
     case DataGridViewAutoSizeColumnMode.NotSet:
     case DataGridViewAutoSizeColumnMode.None:
     case DataGridViewAutoSizeColumnMode.ColumnHeader:
     case DataGridViewAutoSizeColumnMode.AllCellsExceptHeader:
     case DataGridViewAutoSizeColumnMode.AllCells:
     case DataGridViewAutoSizeColumnMode.DisplayedCellsExceptHeader:
     case DataGridViewAutoSizeColumnMode.DisplayedCells:
     case DataGridViewAutoSizeColumnMode.Fill:
     {
         int             preferredWidth;
         int             num3;
         DataGridViewRow row;
         DataGridView    dataGridView = base.DataGridView;
         if (dataGridView == null)
         {
             return(-1);
         }
         DataGridViewAutoSizeColumnCriteriaInternal internal2 = (DataGridViewAutoSizeColumnCriteriaInternal)autoSizeColumnMode;
         int num = 0;
         if (dataGridView.ColumnHeadersVisible && ((internal2 & DataGridViewAutoSizeColumnCriteriaInternal.Header) != DataGridViewAutoSizeColumnCriteriaInternal.NotSet))
         {
             if (fixedHeight)
             {
                 preferredWidth = this.HeaderCell.GetPreferredWidth(-1, dataGridView.ColumnHeadersHeight);
             }
             else
             {
                 preferredWidth = this.HeaderCell.GetPreferredSize(-1).Width;
             }
             if (num < preferredWidth)
             {
                 num = preferredWidth;
             }
         }
         if ((internal2 & DataGridViewAutoSizeColumnCriteriaInternal.AllRows) != DataGridViewAutoSizeColumnCriteriaInternal.NotSet)
         {
             for (num3 = dataGridView.Rows.GetFirstRow(DataGridViewElementStates.Visible); num3 != -1; num3 = dataGridView.Rows.GetNextRow(num3, DataGridViewElementStates.Visible))
             {
                 row = dataGridView.Rows.SharedRow(num3);
                 if (fixedHeight)
                 {
                     preferredWidth = row.Cells[base.Index].GetPreferredWidth(num3, row.Thickness);
                 }
                 else
                 {
                     preferredWidth = row.Cells[base.Index].GetPreferredSize(num3).Width;
                 }
                 if (num < preferredWidth)
                 {
                     num = preferredWidth;
                 }
             }
             return(num);
         }
         if ((internal2 & DataGridViewAutoSizeColumnCriteriaInternal.DisplayedRows) != DataGridViewAutoSizeColumnCriteriaInternal.NotSet)
         {
             int height = dataGridView.LayoutInfo.Data.Height;
             int num5   = 0;
             for (num3 = dataGridView.Rows.GetFirstRow(DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen); (num3 != -1) && (num5 < height); num3 = dataGridView.Rows.GetNextRow(num3, DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen))
             {
                 row = dataGridView.Rows.SharedRow(num3);
                 if (fixedHeight)
                 {
                     preferredWidth = row.Cells[base.Index].GetPreferredWidth(num3, row.Thickness);
                 }
                 else
                 {
                     preferredWidth = row.Cells[base.Index].GetPreferredSize(num3).Width;
                 }
                 if (num < preferredWidth)
                 {
                     num = preferredWidth;
                 }
                 num5 += row.Thickness;
             }
             if (num5 >= height)
             {
                 return(num);
             }
             for (num3 = dataGridView.DisplayedBandsInfo.FirstDisplayedScrollingRow; (num3 != -1) && (num5 < height); num3 = dataGridView.Rows.GetNextRow(num3, DataGridViewElementStates.Visible))
             {
                 row = dataGridView.Rows.SharedRow(num3);
                 if (fixedHeight)
                 {
                     preferredWidth = row.Cells[base.Index].GetPreferredWidth(num3, row.Thickness);
                 }
                 else
                 {
                     preferredWidth = row.Cells[base.Index].GetPreferredSize(num3).Width;
                 }
                 if (num < preferredWidth)
                 {
                     num = preferredWidth;
                 }
                 num5 += row.Thickness;
             }
         }
         return(num);
     }
     }
     throw new InvalidEnumArgumentException("value", (int)autoSizeColumnMode, typeof(DataGridViewAutoSizeColumnMode));
 }
 private bool AutoResizeColumnInternal(int columnIndex, DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaInternal, bool fixedHeight)
 {
     if (!base.IsHandleCreated)
     {
         this.dataGridViewState2[0x100000] = true;
         return false;
     }
     bool flag = false;
     try
     {
         this.noAutoSizeCount++;
         DataGridViewColumn dataGridViewColumn = this.Columns[columnIndex];
         int preferredWidth = dataGridViewColumn.GetPreferredWidth((DataGridViewAutoSizeColumnMode) autoSizeColumnCriteriaInternal, fixedHeight);
         if (preferredWidth < dataGridViewColumn.MinimumThickness)
         {
             preferredWidth = dataGridViewColumn.MinimumThickness;
         }
         if (preferredWidth > 0x10000)
         {
             preferredWidth = 0x10000;
         }
         if (preferredWidth == dataGridViewColumn.Thickness)
         {
             return flag;
         }
         if (dataGridViewColumn.InheritedAutoSizeMode == DataGridViewAutoSizeColumnMode.Fill)
         {
             this.AdjustFillingColumn(dataGridViewColumn, preferredWidth);
         }
         else
         {
             this.Columns[columnIndex].ThicknessInternal = preferredWidth;
         }
         flag = true;
     }
     finally
     {
         this.noAutoSizeCount--;
     }
     return flag;
 }
 private bool AutoResizeAllVisibleColumnsInternal(DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaFilter, bool fixedHeight)
 {
     bool flag = false;
     for (DataGridViewColumn column = this.Columns.GetFirstColumn(DataGridViewElementStates.Visible); column != null; column = this.Columns.GetNextColumn(column, DataGridViewElementStates.Visible, DataGridViewElementStates.None))
     {
         DataGridViewAutoSizeColumnCriteriaInternal inheritedAutoSizeMode = (DataGridViewAutoSizeColumnCriteriaInternal) column.InheritedAutoSizeMode;
         if ((inheritedAutoSizeMode & autoSizeColumnCriteriaFilter) != DataGridViewAutoSizeColumnCriteriaInternal.NotSet)
         {
             flag |= this.AutoResizeColumnInternal(column.Index, inheritedAutoSizeMode, fixedHeight);
         }
     }
     return flag;
 }
 private bool AdjustExpandingColumns(DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaFilter, int rowIndex)
 {
     bool flag = false;
     for (DataGridViewColumn column = this.Columns.GetFirstColumn(DataGridViewElementStates.Visible); column != null; column = this.Columns.GetNextColumn(column, DataGridViewElementStates.Visible, DataGridViewElementStates.None))
     {
         if ((column.InheritedAutoSizeMode & ((DataGridViewAutoSizeColumnMode) ((int) autoSizeColumnCriteriaFilter))) != DataGridViewAutoSizeColumnMode.NotSet)
         {
             flag |= this.AdjustExpandingColumn(column, rowIndex);
         }
     }
     return flag;
 }