Пример #1
0
		protected virtual void OnAutoSizeColumnsModeChanged (DataGridViewAutoSizeColumnsModeEventArgs e)
		{
			DataGridViewAutoSizeColumnsModeEventHandler eh = (DataGridViewAutoSizeColumnsModeEventHandler)(Events [AutoSizeColumnsModeChangedEvent]);
			if (eh != null)
				eh (this, e);
		}
        [SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")] // e.PreviousModes is more precise than just e
        protected virtual void OnAutoSizeColumnsModeChanged(DataGridViewAutoSizeColumnsModeEventArgs e)
        {
            DataGridViewAutoSizeColumnMode[] previousModes = e.PreviousModes;
            if (previousModes == null)
            {
                throw new ArgumentNullException("e.PreviousModes");
            }
            if (previousModes.Length != this.Columns.Count)
            {
                throw new ArgumentException(SR.GetString(SR.DataGridView_PreviousModesHasWrongLength));
            }

            foreach (DataGridViewColumn dataGridViewColumn in this.Columns)
            {
                if (dataGridViewColumn.Visible)
                {
                    DataGridViewAutoSizeColumnMode autoSizeColumnMode = dataGridViewColumn.InheritedAutoSizeMode;
                    Debug.Assert(autoSizeColumnMode != DataGridViewAutoSizeColumnMode.NotSet);
                    DataGridViewAutoSizeColumnMode previousInheritedMode = previousModes[dataGridViewColumn.Index];
                    bool previousInheritedModeAutoSized = previousInheritedMode != DataGridViewAutoSizeColumnMode.Fill &&
                                                          previousInheritedMode != DataGridViewAutoSizeColumnMode.None &&
                                                          previousInheritedMode != DataGridViewAutoSizeColumnMode.NotSet;
                    if (autoSizeColumnMode == DataGridViewAutoSizeColumnMode.Fill ||
                        previousInheritedMode == DataGridViewAutoSizeColumnMode.Fill)
                    {
                        // UsedFillWeight values need to be updated
                        this.dataGridViewState2[DATAGRIDVIEWSTATE2_usedFillWeightsDirty] = true;
                    }

                    if (autoSizeColumnMode != DataGridViewAutoSizeColumnMode.None)
                    {
                        if (autoSizeColumnMode != DataGridViewAutoSizeColumnMode.Fill)
                        {
                            if (!previousInheritedModeAutoSized)
                            {
                                // Save current column width for later reuse
                                dataGridViewColumn.CachedThickness = dataGridViewColumn.Thickness;
                            }
                            AutoResizeColumnInternal(dataGridViewColumn.Index,
                                                     (DataGridViewAutoSizeColumnCriteriaInternal)autoSizeColumnMode,
                                                     (((DataGridViewAutoSizeRowsModeInternal)this.autoSizeRowsMode) & DataGridViewAutoSizeRowsModeInternal.AllColumns) == 0 /*fixedHeight*/);
                        }
                    }
                    else if (dataGridViewColumn.Thickness != dataGridViewColumn.CachedThickness && previousInheritedModeAutoSized)
                    {
                        // Restoring cached column width
                        dataGridViewColumn.ThicknessInternal = Math.Max(dataGridViewColumn.MinimumWidth, dataGridViewColumn.CachedThickness);
                    }
                }
            }

            // Auto fill columns if needed
            PerformLayoutPrivate(false /*useRowShortcut*/, true /*computeVisibleRows*/, true /*invalidInAdjustFillingColumns*/, false /*repositionEditingControl*/);

            // Autosize rows and column headers if needed
            if ((((DataGridViewAutoSizeRowsModeInternal)this.autoSizeRowsMode) & DataGridViewAutoSizeRowsModeInternal.AllColumns) != 0)
            {
                AdjustShrinkingRows(this.autoSizeRowsMode, true /*fixedWidth*/, true /*internalAutosizing*/);
                if (this.ColumnHeadersHeightSizeMode == DataGridViewColumnHeadersHeightSizeMode.AutoSize)
                {
                    AutoResizeColumnHeadersHeight(true /*fixedRowHeadersWidth*/, true /*fixedColumnWidth*/);
                }

                // Second pass of column autosizing with 1 degree of freedom
                foreach (DataGridViewColumn dataGridViewColumn in this.Columns)
                {
                    DataGridViewAutoSizeColumnMode autoSizeColumnMode = dataGridViewColumn.InheritedAutoSizeMode;
                    Debug.Assert(autoSizeColumnMode != DataGridViewAutoSizeColumnMode.NotSet);

                    if (autoSizeColumnMode != DataGridViewAutoSizeColumnMode.None && autoSizeColumnMode != DataGridViewAutoSizeColumnMode.Fill)
                    {
                        AutoResizeColumnInternal(dataGridViewColumn.Index,
                                                 (DataGridViewAutoSizeColumnCriteriaInternal)autoSizeColumnMode,
                                                 true /*fixedHeight*/);
                    }
                }
            }

            DataGridViewAutoSizeColumnsModeEventHandler eh = this.Events[EVENT_DATAGRIDVIEWAUTOSIZECOLUMNSMODECHANGED] as DataGridViewAutoSizeColumnsModeEventHandler;
            if (eh != null && !this.dataGridViewOper[DATAGRIDVIEWOPER_inDispose] && !this.IsDisposed)
            {
                eh(this, e);
            }
        }
 protected virtual void OnAutoSizeColumnsModeChanged(DataGridViewAutoSizeColumnsModeEventArgs e);
        /// <summary>
        /// Extends BeginInvoke so that when a state object is not needed, null does not need to be passed.
        /// <example>
        /// datagridviewautosizecolumnsmodeeventhandler.BeginInvoke(sender, e, callback);
        /// </example>
        /// </summary>
        public static IAsyncResult BeginInvoke(this DataGridViewAutoSizeColumnsModeEventHandler datagridviewautosizecolumnsmodeeventhandler, Object sender, DataGridViewAutoSizeColumnsModeEventArgs e, AsyncCallback callback)
        {
            if(datagridviewautosizecolumnsmodeeventhandler == null) throw new ArgumentNullException("datagridviewautosizecolumnsmodeeventhandler");

            return datagridviewautosizecolumnsmodeeventhandler.BeginInvoke(sender, e, callback, null);
        }
 protected virtual void OnAutoSizeColumnsModeChanged(DataGridViewAutoSizeColumnsModeEventArgs e)
 {
     DataGridViewAutoSizeColumnMode[] previousModes = e.PreviousModes;
     if (previousModes == null)
     {
         throw new ArgumentNullException("e.PreviousModes");
     }
     if (previousModes.Length != this.Columns.Count)
     {
         throw new ArgumentException(System.Windows.Forms.SR.GetString("DataGridView_PreviousModesHasWrongLength"));
     }
     foreach (DataGridViewColumn column in this.Columns)
     {
         if (column.Visible)
         {
             DataGridViewAutoSizeColumnMode inheritedAutoSizeMode = column.InheritedAutoSizeMode;
             DataGridViewAutoSizeColumnMode mode2 = previousModes[column.Index];
             bool flag = ((mode2 != DataGridViewAutoSizeColumnMode.Fill) && (mode2 != DataGridViewAutoSizeColumnMode.None)) && (mode2 != DataGridViewAutoSizeColumnMode.NotSet);
             if ((inheritedAutoSizeMode == DataGridViewAutoSizeColumnMode.Fill) || (mode2 == DataGridViewAutoSizeColumnMode.Fill))
             {
                 this.dataGridViewState2[0x4000000] = true;
             }
             switch (inheritedAutoSizeMode)
             {
                 case DataGridViewAutoSizeColumnMode.None:
                 {
                     if ((column.Thickness != column.CachedThickness) && flag)
                     {
                         column.ThicknessInternal = Math.Max(column.MinimumWidth, column.CachedThickness);
                     }
                     continue;
                 }
                 case DataGridViewAutoSizeColumnMode.Fill:
                 {
                     continue;
                 }
             }
             if (!flag)
             {
                 column.CachedThickness = column.Thickness;
             }
             this.AutoResizeColumnInternal(column.Index, (DataGridViewAutoSizeColumnCriteriaInternal) inheritedAutoSizeMode, (this.autoSizeRowsMode & ((DataGridViewAutoSizeRowsMode) 2)) == DataGridViewAutoSizeRowsMode.None);
         }
     }
     this.PerformLayoutPrivate(false, true, true, false);
     if ((this.autoSizeRowsMode & ((DataGridViewAutoSizeRowsMode) 2)) != DataGridViewAutoSizeRowsMode.None)
     {
         this.AdjustShrinkingRows(this.autoSizeRowsMode, true, true);
         if (this.ColumnHeadersHeightSizeMode == DataGridViewColumnHeadersHeightSizeMode.AutoSize)
         {
             this.AutoResizeColumnHeadersHeight(true, true);
         }
         foreach (DataGridViewColumn column2 in this.Columns)
         {
             DataGridViewAutoSizeColumnMode mode3 = column2.InheritedAutoSizeMode;
             if ((mode3 != DataGridViewAutoSizeColumnMode.None) && (mode3 != DataGridViewAutoSizeColumnMode.Fill))
             {
                 this.AutoResizeColumnInternal(column2.Index, (DataGridViewAutoSizeColumnCriteriaInternal) mode3, true);
             }
         }
     }
     DataGridViewAutoSizeColumnsModeEventHandler handler = base.Events[EVENT_DATAGRIDVIEWAUTOSIZECOLUMNSMODECHANGED] as DataGridViewAutoSizeColumnsModeEventHandler;
     if (((handler != null) && !this.dataGridViewOper[0x100000]) && !base.IsDisposed)
     {
         handler(this, e);
     }
 }