System.Windows.Forms

   1 File: winforms\Managed\System\WinForms\DataGridView.cs
   2 Project: ndp\fx\src\System.Windows.Forms.csproj (System.Windows.Forms)
   3
   4 //------------------------------------------------------------------------------
   5 // <copyright file="DataGridView.cs" company="Microsoft">
   6 //     Copyright (c) Microsoft Corporation.  All rights reserved.
   7 // </copyright>
   8 //------------------------------------------------------------------------------
   9
  10 namespace System.Windows.Forms
  11 {
  12     using System.Text;
  13     using System.Runtime.InteropServices;
  14     using System.Runtime.Remoting;
  15     using System.ComponentModel;
  16     using System;
  17     using System.Diagnostics.CodeAnalysis;
  18     using System.Security;
  19     using System.Security.Permissions;
  20     using System.Collections;
  21     using System.Windows.Forms;
  22     using System.Windows.Forms.Design;
  23     using System.ComponentModel.Design;
  24     using System.Drawing;
  25     using System.Windows.Forms.ComponentModel;
  26     using System.Windows.Forms.Layout;
  27     using System.Globalization;
  28     using System.Diagnostics;
  29     using System.Windows.Forms.VisualStyles;
  30     using Microsoft.Win32;
  31     using System.Collections.Specialized;
  32
  33     /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView"]/*‘ />
  34     [
  35         ComVisible(true),
  36         ClassInterface(ClassInterfaceType.AutoDispatch),
  37         Designer("System.Windows.Forms.Design.DataGridViewDesigner, " + AssemblyRef.SystemDesign),
  38         //DefaultProperty("DataSource"),
  39         DefaultEvent("CellContentClick"),
  40         ComplexBindingProperties("DataSource", "DataMember"),
  41         Docking(DockingBehavior.Ask),
  42         Editor("System.Windows.Forms.Design.DataGridViewComponentEditor, " + AssemblyRef.SystemDesign, typeof(ComponentEditor)),
  43         SRDescription(SR.DescriptionDataGridView)
  44     ]
  45     public partial class DataGridView : Control, ISupportInitialize
  46     {
  47         private static readonly object EVENT_DATAGRIDVIEWALLOWUSERTOADDROWSCHANGED = new object();
  48         private static readonly object EVENT_DATAGRIDVIEWALLOWUSERTODELETEROWSCHANGED = new object();
  49         private static readonly object EVENT_DATAGRIDVIEWALLOWUSERTOORDERCOLUMNSCHANGED = new object();
  50         private static readonly object EVENT_DATAGRIDVIEWALLOWUSERTORESIZECOLUMNSCHANGED = new object();
  51         private static readonly object EVENT_DATAGRIDVIEWALLOWUSERTORESIZEROWSCHANGED = new object();
  52         private static readonly object EVENT_DATAGRIDVIEWALTERNATINGROWSDEFAULTCELLSTYLECHANGED = new object();
  53         private static readonly object EVENT_DATAGRIDVIEWAUTOGENERATECOLUMNSCHANGED = new object();
  54         private static readonly object EVENT_DATAGRIDVIEWAUTOSIZECOLUMNMODECHANGED = new object();
  55         private static readonly object EVENT_DATAGRIDVIEWAUTOSIZECOLUMNSMODECHANGED = new object();
  56         private static readonly object EVENT_DATAGRIDVIEWAUTOSIZEROWSMODECHANGED = new object();
  57         private static readonly object EVENT_DATAGRIDVIEWBACKGROUNDCOLORCHANGED = new object();
  58         private static readonly object EVENT_DATAGRIDVIEWBORDERSTYLECHANGED = new object();
  59         private static readonly object EVENT_DATAGRIDVIEWCANCELROWEDIT = new object();
  60         private static readonly object EVENT_DATAGRIDVIEWCELLBEGINEDIT = new object();
  61         private static readonly object EVENT_DATAGRIDVIEWCELLBORDERSTYLECHANGED = new object();
  62         private static readonly object EVENT_DATAGRIDVIEWCELLCLICK = new object();
  63         private static readonly object EVENT_DATAGRIDVIEWCELLCONTENTCLICK = new object();
  64         private static readonly object EVENT_DATAGRIDVIEWCELLCONTENTDOUBLECLICK = new object();
  65         private static readonly object EVENT_DATAGRIDVIEWCELLCONTEXTMENUSTRIPCHANGED = new object();
  66         private static readonly object EVENT_DATAGRIDVIEWCELLCONTEXTMENUSTRIPNEEDED = new object();
  67         private static readonly object EVENT_DATAGRIDVIEWCELLDOUBLECLICK = new object();
  68         private static readonly object EVENT_DATAGRIDVIEWCELLENDEDIT = new object();
  69         private static readonly object EVENT_DATAGRIDVIEWCELLENTER = new object();
  70         private static readonly object EVENT_DATAGRIDVIEWCELLERRORTEXTCHANGED = new object();
  71         private static readonly object EVENT_DATAGRIDVIEWCELLERRORTEXTNEEDED = new object();
  72         private static readonly object EVENT_DATAGRIDVIEWCELLFORMATTING = new object();
  73         private static readonly object EVENT_DATAGRIDVIEWCELLLEAVE = new object();
  74         private static readonly object EVENT_DATAGRIDVIEWCELLMOUSECLICK = new object();
  75         private static readonly object EVENT_DATAGRIDVIEWCELLMOUSEDOUBLECLICK = new object();
  76         private static readonly object EVENT_DATAGRIDVIEWCELLMOUSEDOWN = new object();
  77         private static readonly object EVENT_DATAGRIDVIEWCELLMOUSEENTER = new object();
  78         private static readonly object EVENT_DATAGRIDVIEWCELLMOUSELEAVE = new object();
  79         private static readonly object EVENT_DATAGRIDVIEWCELLMOUSEMOVE = new object();
  80         private static readonly object EVENT_DATAGRIDVIEWCELLMOUSEUP = new object();
  81         private static readonly object EVENT_DATAGRIDVIEWCELLPAINTING = new object();
  82         private static readonly object EVENT_DATAGRIDVIEWCELLPARSING = new object();
  83         private static readonly object EVENT_DATAGRIDVIEWCELLSTATECHANGED = new object();
  84         private static readonly object EVENT_DATAGRIDVIEWCELLSTYLECHANGED = new object();
  85         private static readonly object EVENT_DATAGRIDVIEWCELLSTYLECONTENTCHANGED = new object();
  86         private static readonly object EVENT_DATAGRIDVIEWCELLTOOLTIPTEXTCHANGED = new object();
  87         private static readonly object EVENT_DATAGRIDVIEWCELLTOOLTIPTEXTNEEDED = new object();
  88         private static readonly object EVENT_DATAGRIDVIEWCELLVALIDATING = new object();
  89         private static readonly object EVENT_DATAGRIDVIEWCELLVALIDATED = new object();
  90         private static readonly object EVENT_DATAGRIDVIEWCELLVALUECHANGED = new object();
  91         private static readonly object EVENT_DATAGRIDVIEWCELLVALUENEEDED = new object();
  92         private static readonly object EVENT_DATAGRIDVIEWCELLVALUEPUSHED = new object();
  93         private static readonly object EVENT_DATAGRIDVIEWCOLUMNADDED = new object();
  94         private static readonly object EVENT_DATAGRIDVIEWCOLUMNCONTEXTMENUSTRIPCHANGED = new object();
  95         private static readonly object EVENT_DATAGRIDVIEWCOLUMNDATAPROPERTYNAMECHANGED = new object();
  96         private static readonly object EVENT_DATAGRIDVIEWCOLUMNDEFAULTCELLSTYLECHANGED = new object();
  97         private static readonly object EVENT_DATAGRIDVIEWCOLUMNDISPLAYINDEXCHANGED = new object();
  98         private static readonly object EVENT_DATAGRIDVIEWCOLUMNDIVIDERWIDTHCHANGED = new object();
  99         private static readonly object EVENT_DATAGRIDVIEWCOLUMNHEADERCELLCHANGED = new object();
 100         private static readonly object EVENT_DATAGRIDVIEWCOLUMNDIVIDERDOUBLECLICK = new object();
 101         private static readonly object EVENT_DATAGRIDVIEWCOLUMNHEADERMOUSECLICK = new object();
 102         private static readonly object EVENT_DATAGRIDVIEWCOLUMNHEADERMOUSEDOUBLECLICK = new object();
 103         private static readonly object EVENT_DATAGRIDVIEWCOLUMNHEADERSBORDERSTYLECHANGED = new object();
 104         private static readonly object EVENT_DATAGRIDVIEWCOLUMNHEADERSDEFAULTCELLSTYLECHANGED = new object();
 105         private static readonly object EVENT_DATAGRIDVIEWCOLUMNHEADERSHEIGHTCHANGED = new object();
 106         private static readonly object EVENT_DATAGRIDVIEWCOLUMNHEADERSHEIGHTSIZEMODECHANGED = new object();
 107         private static readonly object EVENT_DATAGRIDVIEWCOLUMNMINIMUMWIDTHCHANGED = new object();
 108         private static readonly object EVENT_DATAGRIDVIEWCOLUMNNAMECHANGED = new object();
 109         private static readonly object EVENT_DATAGRIDVIEWCOLUMNREMOVED = new object();
 110         private static readonly object EVENT_DATAGRIDVIEWCOLUMNSORTMODECHANGED = new object();
 111         private static readonly object EVENT_DATAGRIDVIEWCOLUMNSTATECHANGED = new object();
 112         private static readonly object EVENT_DATAGRIDVIEWCOLUMNTOOLTIPTEXTCHANGED = new object();
 113         private static readonly object EVENT_DATAGRIDVIEWCOLUMNWIDTHCHANGED = new object();
 114         private static readonly object EVENT_DATAGRIDVIEWCURRENTCELLCHANGED = new object();
 115         private static readonly object EVENT_DATAGRIDVIEWCURRENTCELLDIRTYSTATECHANGED = new object();
 116         private static readonly object EVENT_DATAGRIDVIEWDATABINDINGCOMPLETE = new object();
 117         private static readonly object EVENT_DATAGRIDVIEWDATAERROR = new object();
 118         private static readonly object EVENT_DATAGRIDVIEWDATAMEMBERCHANGED = new object();
 119         private static readonly object EVENT_DATAGRIDVIEWDATASOURCECHANGED = new object();
 120         private static readonly object EVENT_DATAGRIDVIEWDEFAULTCELLSTYLECHANGED = new object();
 121         private static readonly object EVENT_DATAGRIDVIEWDEFAULTVALUESNEEDED = new object();
 122         private static readonly object EVENT_DATAGRIDVIEWEDITINGCONTROLSHOWING = new object();
 123         private static readonly object EVENT_DATAGRIDVIEWEDITMODECHANGED = new object();
 124         private static readonly object EVENT_DATAGRIDVIEWGRIDCOLORCHANGED = new object();
 125         private static readonly object EVENT_DATAGRIDVIEWMULTISELECTCHANGED = new object();
 126         private static readonly object EVENT_DATAGRIDVIEWNEWROWNEEDED = new object();
 127         private static readonly object EVENT_DATAGRIDVIEWREADONLYCHANGED = new object();
 128         private static readonly object EVENT_DATAGRIDVIEWROWCONTEXTMENUSTRIPCHANGED = new object();
 129         private static readonly object EVENT_DATAGRIDVIEWROWCONTEXTMENUSTRIPNEEDED = new object();
 130         private static readonly object EVENT_DATAGRIDVIEWROWDEFAULTCELLSTYLECHANGED = new object();
 131         private static readonly object EVENT_DATAGRIDVIEWROWDIRTYSTATENEEDED = new Object();
 132         private static readonly object EVENT_DATAGRIDVIEWROWDIVIDERHEIGHTCHANGED = new object();
 133         private static readonly object EVENT_DATAGRIDVIEWROWENTER = new object();
 134         private static readonly object EVENT_DATAGRIDVIEWROWERRORTEXTCHANGED = new object();
 135         private static readonly object EVENT_DATAGRIDVIEWROWERRORTEXTNEEDED = new object();
 136         private static readonly object EVENT_DATAGRIDVIEWROWHEADERCELLCHANGED = new object();
 137         private static readonly object EVENT_DATAGRIDVIEWROWDIVIDERDOUBLECLICK = new object();
 138         private static readonly object EVENT_DATAGRIDVIEWROWHEADERMOUSECLICK = new object();
 139         private static readonly object EVENT_DATAGRIDVIEWROWHEADERMOUSEDOUBLECLICK = new object();
 140         private static readonly object EVENT_DATAGRIDVIEWROWHEADERSBORDERSTYLECHANGED = new object();
 141         private static readonly object EVENT_DATAGRIDVIEWROWHEADERSDEFAULTCELLSTYLECHANGED = new object();
 142         private static readonly object EVENT_DATAGRIDVIEWROWHEADERSWIDTHCHANGED = new object();
 143         private static readonly object EVENT_DATAGRIDVIEWROWHEADERSWIDTHSIZEMODECHANGED = new object();
 144         private static readonly object EVENT_DATAGRIDVIEWROWHEIGHTCHANGED = new object();
 145         private static readonly object EVENT_DATAGRIDVIEWROWHEIGHTINFONEEDED = new object();
 146         private static readonly object EVENT_DATAGRIDVIEWROWHEIGHTINFOPUSHED = new object();
 147         private static readonly object EVENT_DATAGRIDVIEWROWLEAVE = new object();
 148         private static readonly object EVENT_DATAGRIDVIEWROWMINIMUMHEIGHTCHANGED = new object();
 149         private static readonly object EVENT_DATAGRIDVIEWROWPOSTPAINT = new object();
 150         private static readonly object EVENT_DATAGRIDVIEWROWPREPAINT = new object();
 151         private static readonly object EVENT_DATAGRIDVIEWROWSADDED = new object();
 152         private static readonly object EVENT_DATAGRIDVIEWROWSDEFAULTCELLSTYLECHANGED = new object();
 153         private static readonly object EVENT_DATAGRIDVIEWROWSREMOVED = new object();
 154         private static readonly object EVENT_DATAGRIDVIEWROWSTATECHANGED = new object();
 155         private static readonly object EVENT_DATAGRIDVIEWROWUNSHARED = new object();
 156         private static readonly object EVENT_DATAGRIDVIEWROWVALIDATED = new object();
 157         private static readonly object EVENT_DATAGRIDVIEWROWVALIDATING = new object();
 158         private static readonly object EVENT_DATAGRIDVIEWSCROLL = new object();
 159         private static readonly object EVENT_DATAGRIDVIEWSELECTIONCHANGED = new object();
 160         private static readonly object EVENT_DATAGRIDVIEWSORTCOMPARE = new object();
 161         private static readonly object EVENT_DATAGRIDVIEWSORTED = new object();
 162         private static readonly object EVENT_DATAGRIDVIEWUSERADDEDROW = new object();
 163         private static readonly object EVENT_DATAGRIDVIEWUSERDELETEDROW = new object();
 164         private static readonly object EVENT_DATAGRIDVIEWUSERDELETINGROW = new object();
 165
 166         private const int DATAGRIDVIEWSTATE1_allowUserToAddRows           = 0x00000001;
 167         private const int DATAGRIDVIEWSTATE1_allowUserToDeleteRows        = 0x00000002;
 168         private const int DATAGRIDVIEWSTATE1_allowUserToOrderColumns      = 0x00000004;
 169         private const int DATAGRIDVIEWSTATE1_columnHeadersVisible         = 0x00000008;
 170         private const int DATAGRIDVIEWSTATE1_rowHeadersVisible            = 0x00000010;
 171         private const int DATAGRIDVIEWSTATE1_forwardCharMessage           = 0x00000020;
 172         private const int DATAGRIDVIEWSTATE1_leavingWithTabKey            = 0x00000040;
 173         private const int DATAGRIDVIEWSTATE1_multiSelect                  = 0x00000080;
 174         private const int DATAGRIDVIEWSTATE1_ignoringEditingChanges       = 0x00000200;
 175         private const int DATAGRIDVIEWSTATE1_ambientForeColor             = 0x00000400;
 176         private const int DATAGRIDVIEWSTATE1_scrolledSinceMouseDown       = 0x00000800;
 177         private const int DATAGRIDVIEWSTATE1_editingControlHidden         = 0x00001000;
 178         private const int DATAGRIDVIEWSTATE1_standardTab                  = 0x00002000;
 179         private const int DATAGRIDVIEWSTATE1_editingControlChanging       = 0x00004000;
 180         private const int DATAGRIDVIEWSTATE1_currentCellInEditMode        = 0x00008000;
 181         private const int DATAGRIDVIEWSTATE1_virtualMode                  = 0x00010000;
 182         private const int DATAGRIDVIEWSTATE1_editedCellChanged            = 0x00020000;
 183         private const int DATAGRIDVIEWSTATE1_editedRowChanged             = 0x00040000;
 184         private const int DATAGRIDVIEWSTATE1_newRowEdited                 = 0x00080000;
 185         private const int DATAGRIDVIEWSTATE1_readOnly                     = 0x00100000;
 186         private const int DATAGRIDVIEWSTATE1_newRowCreatedByEditing       = 0x00200000;
 187         private const int DATAGRIDVIEWSTATE1_temporarilyResetCurrentCell  = 0x00400000;
 188         private const int DATAGRIDVIEWSTATE1_autoGenerateColumns          = 0x00800000;
 189         private const int DATAGRIDVIEWSTATE1_customCursorSet              = 0x01000000;
 190         private const int DATAGRIDVIEWSTATE1_ambientFont                  = 0x02000000;
 191         private const int DATAGRIDVIEWSTATE1_ambientColumnHeadersFont     = 0x04000000;
 192         private const int DATAGRIDVIEWSTATE1_ambientRowHeadersFont        = 0x08000000;
 193         private const int DATAGRIDVIEWSTATE1_isRestrictedChecked          = 0x10000000;
 194         private const int DATAGRIDVIEWSTATE1_isRestricted                 = 0x20000000;
 195         private const int DATAGRIDVIEWSTATE1_isAutoSized                  = 0x40000000;
 196
 197         // DATAGRIDVIEWSTATE2_
 198         private const int DATAGRIDVIEWSTATE2_showEditingIcon               = 0x00000001;
 199         private const int DATAGRIDVIEWSTATE2_allowUserToResizeColumns      = 0x00000002;
 200         private const int DATAGRIDVIEWSTATE2_allowUserToResizeRows         = 0x00000004;
 201         private const int DATAGRIDVIEWSTATE2_mouseOverRemovedEditingCtrl   = 0x00000008;
 202         private const int DATAGRIDVIEWSTATE2_mouseOverRemovedEditingPanel  = 0x00000010;
 203         private const int DATAGRIDVIEWSTATE2_mouseEnterExpected            = 0x00000020;
 204         private const int DATAGRIDVIEWSTATE2_enableHeadersVisualStyles     = 0x00000040;
 205         private const int DATAGRIDVIEWSTATE2_showCellErrors                = 0x00000080;
 206         private const int DATAGRIDVIEWSTATE2_showCellToolTips              = 0x00000100;
 207         private const int DATAGRIDVIEWSTATE2_showRowErrors                 = 0x00000200;
 208         private const int DATAGRIDVIEWSTATE2_showColumnRelocationInsertion = 0x00000400;
 209         private const int DATAGRIDVIEWSTATE2_rightToLeftMode               = 0x00000800;
 210         private const int DATAGRIDVIEWSTATE2_rightToLeftValid              = 0x00001000;
 211         private const int DATAGRIDVIEWSTATE2_currentCellWantsInputKey      = 0x00002000;
 212         private const int DATAGRIDVIEWSTATE2_stopRaisingVerticalScroll     = 0x00004000;
 213         private const int DATAGRIDVIEWSTATE2_stopRaisingHorizontalScroll   = 0x00008000;
 214         private const int DATAGRIDVIEWSTATE2_replacedCellSelected          = 0x00010000;
 215         private const int DATAGRIDVIEWSTATE2_replacedCellReadOnly          = 0x00020000;
 216         private const int DATAGRIDVIEWSTATE2_raiseSelectionChanged         = 0x00040000;
 217         private const int DATAGRIDVIEWSTATE2_initializing                  = 0x00080000;
 218         private const int DATAGRIDVIEWSTATE2_autoSizedWithoutHandle        = 0x00100000;
 219         private const int DATAGRIDVIEWSTATE2_ignoreCursorChange            = 0x00200000;
 220         private const int DATAGRIDVIEWSTATE2_rowsCollectionClearedInSetCell= 0x00400000;
 221         private const int DATAGRIDVIEWSTATE2_nextMouseUpIsDouble           = 0x00800000;
 222         private const int DATAGRIDVIEWSTATE2_inBindingContextChanged       = 0x01000000;
 223         private const int DATAGRIDVIEWSTATE2_allowHorizontalScrollbar      = 0x02000000;
 224         private const int DATAGRIDVIEWSTATE2_usedFillWeightsDirty          = 0x04000000;
 225         private const int DATAGRIDVIEWSTATE2_messageFromEditingCtrls       = 0x08000000;
 226         private const int DATAGRIDVIEWSTATE2_cellMouseDownInContentBounds  = 0x10000000;
 227         private const int DATAGRIDVIEWSTATE2_discardEditingControl         = 0x20000000;
 228
 229         // DATAGRIDVIEWOPER_
 230         private const int DATAGRIDVIEWOPER_trackColResize                = 0x00000001;
 231         private const int DATAGRIDVIEWOPER_trackRowResize                = 0x00000002;
 232         private const int DATAGRIDVIEWOPER_trackColSelect                = 0x00000004;
 233         private const int DATAGRIDVIEWOPER_trackRowSelect                = 0x00000008;
 234         private const int DATAGRIDVIEWOPER_trackCellSelect               = 0x00000010;
 235         private const int DATAGRIDVIEWOPER_trackColRelocation            = 0x00000020;
 236         private const int DATAGRIDVIEWOPER_inSort                        = 0x00000040;
 237         private const int DATAGRIDVIEWOPER_trackColHeadersResize         = 0x00000080;
 238         private const int DATAGRIDVIEWOPER_trackRowHeadersResize         = 0x00000100;
 239         private const int DATAGRIDVIEWOPER_trackMouseMoves               = 0x00000200;
 240         private const int DATAGRIDVIEWOPER_inRefreshColumns              = 0x00000400;
 241         private const int DATAGRIDVIEWOPER_inDisplayIndexAdjustments     = 0x00000800;
 242         private const int DATAGRIDVIEWOPER_lastEditCtrlClickDoubled      = 0x00001000;
 243         private const int DATAGRIDVIEWOPER_inMouseDown                   = 0x00002000;
 244         private const int DATAGRIDVIEWOPER_inReadOnlyChange              = 0x00004000;
 245         private const int DATAGRIDVIEWOPER_inCellValidating              = 0x00008000;
 246         private const int DATAGRIDVIEWOPER_inBorderStyleChange           = 0x00010000;
 247         private const int DATAGRIDVIEWOPER_inCurrentCellChange           = 0x00020000;
 248         private const int DATAGRIDVIEWOPER_inAdjustFillingColumns        = 0x00040000;
 249         private const int DATAGRIDVIEWOPER_inAdjustFillingColumn         = 0x00080000;
 250         private const int DATAGRIDVIEWOPER_inDispose                     = 0x00100000;
 251         private const int DATAGRIDVIEWOPER_inBeginEdit                   = 0x00200000;
 252         private const int DATAGRIDVIEWOPER_inEndEdit                     = 0x00400000;
 253         private const int DATAGRIDVIEWOPER_resizingOperationAboutToStart = 0x00800000;
 254
 255         private static Size DragSize = SystemInformation.DragSize;
 256
 257         private const byte DATAGRIDVIEW_columnSizingHotZone = 6;
 258         private const byte DATAGRIDVIEW_rowSizingHotZone = 5;
 259         private const byte DATAGRIDVIEW_insertionBarWidth = 3;
 260         private const byte DATAGRIDVIEW_bulkPaintThreshold = 8;
 261
 262         private const string DATAGRIDVIEW_htmlPrefix = "Version:1.0\r\nStartHTML:00000097\r\nEndHTML:{0}\r\nStartFragment:00000133\r\nEndFragment:{1}\r\n";
 263         private const string DATAGRIDVIEW_htmlStartFragment = "<HTML>\r\n<BODY>\r\n<!--StartFragment-->";
 264         private const string DATAGRIDVIEW_htmlEndFragment = "\r\n<!--EndFragment-->\r\n</BODY>\r\n</HTML>";
 265
 266         private System.Collections.Specialized.BitVector32 dataGridViewState1;  // see DATAGRIDVIEWSTATE1_ consts above
 267         private System.Collections.Specialized.BitVector32 dataGridViewState2;  // see DATAGRIDVIEWSTATE2_ consts above
 268         private System.Collections.Specialized.BitVector32 dataGridViewOper;   // see DATAGRIDVIEWOPER_ consts above
 269
 270         private const BorderStyle defaultBorderStyle = BorderStyle.FixedSingle;
 271         private const DataGridViewAdvancedCellBorderStyle defaultAdvancedCellBorderStyle = DataGridViewAdvancedCellBorderStyle.Single;
 272         private const DataGridViewAdvancedCellBorderStyle defaultAdvancedRowHeadersBorderStyle = DataGridViewAdvancedCellBorderStyle.OutsetPartial;
 273         private const DataGridViewAdvancedCellBorderStyle defaultAdvancedColumnHeadersBorderStyle = DataGridViewAdvancedCellBorderStyle.OutsetPartial;
 274
 275         private const DataGridViewSelectionMode defaultSelectionMode = DataGridViewSelectionMode.RowHeaderSelect;
 276         private const DataGridViewEditMode defaultEditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
 277
 278         private const DataGridViewAutoSizeRowCriteriaInternal invalidDataGridViewAutoSizeRowCriteriaInternalMask = ~(DataGridViewAutoSizeRowCriteriaInternal.Header | DataGridViewAutoSizeRowCriteriaInternal.AllColumns);
 279
 280         private SolidBrush backgroundBrush = DefaultBackgroundBrush;
 281         private Pen gridPen;
 282         private Cursor oldCursor;
 283
 284         private HScrollBar horizScrollBar = new HScrollBar();
 285         private VScrollBar vertScrollBar = new VScrollBar();
 286         private DataGridViewHeaderCell topLeftHeaderCell;
 287
 288         private DataGridViewRow rowTemplate;
 289         private DataGridViewRowCollection dataGridViewRows;
 290         private DataGridViewColumnCollection dataGridViewColumns;
 291
 292         private DataGridViewCellStyle placeholderCellStyle;
 293         private StringFormat placeholderStringFormat;
 294
 295         private DataGridViewColumn sortedColumn;
 296         private SortOrder sortOrder;
 297
 298         private object uneditedFormattedValue;
 299         private Control editingControl, latestEditingControl, cachedEditingControl;
 300         private Panel editingPanel;
 301         private Point ptCurrentCell, ptCurrentCellCache = Point.Empty, ptAnchorCell, ptMouseDownCell, ptMouseEnteredCell, ptToolTipCell, ptMouseDownGridCoord;
 302
 303         private DataGridViewSelectionMode selectionMode;
 304         private DataGridViewEditMode editMode;
 305
 306         // Note that a cell can only be in one bag but not both at the same time.
 307         private DataGridViewCellLinkedList individualSelectedCells;
 308         private DataGridViewCellLinkedList individualReadOnlyCells;
 309         private DataGridViewIntLinkedList selectedBandIndexes;
 310         private DataGridViewIntLinkedList selectedBandSnapshotIndexes;
 311
 312         private DataGridViewCellStyle defaultCellStyle, columnHeadersDefaultCellStyle, rowHeadersDefaultCellStyle;
 313         private DataGridViewCellStyle rowsDefaultCellStyle, alternatingRowsDefaultCellStyle;
 314         private ScrollBars scrollBars;
 315         private LayoutData layout;
 316         private DisplayedBandsData displayedBandsInfo;
 317         private Rectangle normalClientRectangle;
 318         private ArrayList lstRows;
 319         private int availableWidthForFillColumns;
 320
 321         private BorderStyle borderStyle;
 322         private DataGridViewAdvancedBorderStyle advancedCellBorderStyle;
 323         private DataGridViewAdvancedBorderStyle advancedRowHeadersBorderStyle;
 324         private DataGridViewAdvancedBorderStyle advancedColumnHeadersBorderStyle;
 325
 326         private DataGridViewClipboardCopyMode clipboardCopyMode;
 327
 328         private const int minimumRowHeadersWidth = 4;
 329         private const int minimumColumnHeadersHeight = 4;
 330         private const int defaultRowHeadersWidth = 41;
 331         private const int maxHeadersThickness = 32768;
 332         private const int upperSize = 0x007FFFFF;
 333         private int rowHeadersWidth = defaultRowHeadersWidth;
 334         private int cachedRowHeadersWidth;
 335         private const int defaultColumnHeadersHeight = 23;
 336         private int columnHeadersHeight = defaultColumnHeadersHeight;
 337         private int cachedColumnHeadersHeight;
 338         private DataGridViewAutoSizeRowsMode autoSizeRowsMode;
 339         private DataGridViewAutoSizeColumnsMode autoSizeColumnsMode;
 340         private DataGridViewColumnHeadersHeightSizeMode columnHeadersHeightSizeMode;
 341         private DataGridViewRowHeadersWidthSizeMode rowHeadersWidthSizeMode;
 342
 343         private DataGridViewCellStyleChangedEventArgs dgvcsce;
 344         private DataGridViewCellPaintingEventArgs dgvcpe;
 345         private DataGridViewCellValueEventArgs dgvcve;
 346         private DataGridViewRowHeightInfoNeededEventArgs dgvrhine;
 347         private DataGridViewRowPostPaintEventArgs dgvrpope;
 348         private DataGridViewRowPrePaintEventArgs dgvrprpe;
 349
 350         // the sum of the widths in pixels of the scrolling columns preceding
 351         // the first visible scrolling column
 352         private int horizontalOffset;
 353
 354         // the sum of the heights in pixels of the scrolling rows preceding
 355         // the first visible scrolling row
 356         private int verticalOffset;
 357
 358         // the number of pixels of the firstDisplayedScrollingCol which are not visible
 359         private int negOffset;
 360
 361         // the index of the potential ‘new‘ row. -1 if there is no ‘new‘ row.
 362         private int newRowIndex = -1;
 363
 364         // residual fraction of WHEEL_DELTA (120) for wheel scrolling
 365         private int cumulativeVerticalWheelDelta;
 366         private int cumulativeHorizontalWheelDelta;
 367
 368         private int trackColAnchor;
 369         private int trackColumn = -1;
 370         private int trackColumnEdge = -1;
 371         private int trackRowAnchor;
 372         private int trackRow = -1;
 373         private int trackRowEdge = -1;
 374         private int lastHeaderShadow = -1;
 375         private int currentColSplitBar = -1, lastColSplitBar = -1;
 376         private int currentRowSplitBar = -1, lastRowSplitBar = -1;
 377         private int mouseBarOffset;
 378         private int noDimensionChangeCount;
 379         private int noSelectionChangeCount;
 380         private int noAutoSizeCount;
 381         private int inBulkPaintCount;
 382         private int inBulkLayoutCount;
 383         private int inPerformLayoutCount;
 384
 385         private System.Windows.Forms.Timer vertScrollTimer, horizScrollTimer;
 386
 387         private Hashtable converters;
 388         private Hashtable pens;
 389         private Hashtable brushes;
 390
 391         private NativeMethods.RECT[] cachedScrollableRegion;
 392
 393         // DataBinding
 394         private DataGridViewDataConnection dataConnection;
 395
 396         // ToolTip
 397         private DataGridViewToolTip toolTipControl;
 398         // the tool tip string we get from cells
 399         private string toolTipCaption = String.Empty;
 400
 401         private const int maxTTDISPINFOBufferLength = 80;
 402
 403         // Last Mouse Click Info
 404         private MouseClickInfo lastMouseClickInfo;
 405
 406 #if DEBUG
 407         // set to false when the grid is not in [....] with the underlying data store
 408         // in virtual mode, and OnCellValueNeeded cannot be called.
 409 // disable csharp compiler warning #0414: field assigned unused value
 410 #pragma warning disable 0414
 411         internal bool dataStoreAccessAllowed = true;
 412 #pragma warning restore 0414
 413 #endif
 414         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DataGridView"]/*‘ />
 415         /// <devdoc>
 416         /// <para>Initializes a new instance of the <see cref=‘System.Windows.Forms.DataGridView‘/> class.</para>
 417         /// </devdoc>
 418         public DataGridView()
 419         {
 420             SetStyle(ControlStyles.UserPaint |
 421                      ControlStyles.Opaque |
 422                      ControlStyles.UserMouse, true);
 423
 424             SetStyle(ControlStyles.SupportsTransparentBackColor, false);
 425
 426             // this class overrides GetPreferredSizeCore, let Control automatically cache the result
 427             SetState2(STATE2_USEPREFERREDSIZECACHE, true);
 428
 429             this.dataGridViewState1 = new System.Collections.Specialized.BitVector32(0x00000000);
 430             this.dataGridViewState2 = new System.Collections.Specialized.BitVector32(0x00000000);
 431             this.dataGridViewOper   = new System.Collections.Specialized.BitVector32(0x00000000);
 432
 433             this.dataGridViewState1[  DATAGRIDVIEWSTATE1_columnHeadersVisible
 434                                     | DATAGRIDVIEWSTATE1_rowHeadersVisible
 435                                     | DATAGRIDVIEWSTATE1_autoGenerateColumns
 436                                     | DATAGRIDVIEWSTATE1_allowUserToAddRows
 437                                     | DATAGRIDVIEWSTATE1_allowUserToDeleteRows ] = true;
 438
 439
 440
 441             this.dataGridViewState2[  DATAGRIDVIEWSTATE2_showEditingIcon
 442                                     | DATAGRIDVIEWSTATE2_enableHeadersVisualStyles
 443                                     | DATAGRIDVIEWSTATE2_mouseEnterExpected
 444                                     | DATAGRIDVIEWSTATE2_allowUserToResizeColumns
 445                                     | DATAGRIDVIEWSTATE2_allowUserToResizeRows
 446                                     | DATAGRIDVIEWSTATE2_showCellToolTips
 447                                     | DATAGRIDVIEWSTATE2_showCellErrors
 448                                     | DATAGRIDVIEWSTATE2_showRowErrors
 449                                     | DATAGRIDVIEWSTATE2_allowHorizontalScrollbar
 450                                     | DATAGRIDVIEWSTATE2_usedFillWeightsDirty ] = true;
 451
 452
 453             this.displayedBandsInfo = new DisplayedBandsData();
 454             this.lstRows = new ArrayList();
 455
 456             this.converters = new Hashtable(8);
 457             this.pens = new Hashtable(8);
 458             this.brushes = new Hashtable(10);
 459             this.gridPen = new Pen(DefaultGridColor);
 460
 461             this.selectedBandIndexes = new DataGridViewIntLinkedList();
 462             this.individualSelectedCells = new DataGridViewCellLinkedList();
 463             this.individualReadOnlyCells = new DataGridViewCellLinkedList();
 464
 465             this.advancedCellBorderStyle = new DataGridViewAdvancedBorderStyle(this,
 466                 DataGridViewAdvancedCellBorderStyle.OutsetDouble,
 467                 DataGridViewAdvancedCellBorderStyle.OutsetPartial,
 468                 DataGridViewAdvancedCellBorderStyle.InsetDouble);
 469             this.advancedRowHeadersBorderStyle = new DataGridViewAdvancedBorderStyle(this);
 470             this.advancedColumnHeadersBorderStyle = new DataGridViewAdvancedBorderStyle(this);
 471             this.advancedCellBorderStyle.All = defaultAdvancedCellBorderStyle;
 472             this.advancedRowHeadersBorderStyle.All = defaultAdvancedRowHeadersBorderStyle;
 473             this.advancedColumnHeadersBorderStyle.All = defaultAdvancedColumnHeadersBorderStyle;
 474             this.borderStyle = defaultBorderStyle;
 475             this.dataGridViewState1[DATAGRIDVIEWSTATE1_multiSelect] = true;
 476             this.selectionMode = defaultSelectionMode;
 477             this.editMode = defaultEditMode;
 478             this.autoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
 479             this.autoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
 480             this.columnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
 481             this.rowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing;
 482
 483             this.clipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithAutoHeaderText;
 484
 485             this.layout = new LayoutData();
 486             this.layout.TopLeftHeader        = Rectangle.Empty;
 487             this.layout.ColumnHeaders        = Rectangle.Empty;
 488             this.layout.RowHeaders           = Rectangle.Empty;
 489             this.layout.ColumnHeadersVisible = true;
 490             this.layout.RowHeadersVisible    = true;
 491             this.layout.ClientRectangle      = this.ClientRectangle;
 492
 493             this.scrollBars = ScrollBars.Both;
 494
 495             this.horizScrollBar.RightToLeft = RightToLeft.Inherit;
 496             this.horizScrollBar.AccessibleName = SR.GetString(SR.DataGridView_AccHorizontalScrollBarAccName);
 497             this.horizScrollBar.Top = this.ClientRectangle.Height - horizScrollBar.Height;
 498             this.horizScrollBar.Left = 0;
 499             this.horizScrollBar.Visible = false;
 500             this.horizScrollBar.Scroll += new ScrollEventHandler(DataGridViewHScrolled);
 501             this.Controls.Add(this.horizScrollBar);
 502
 503             this.vertScrollBar.Top = 0;
 504             this.vertScrollBar.AccessibleName = SR.GetString(SR.DataGridView_AccVerticalScrollBarAccName);
 505             this.vertScrollBar.Left = this.ClientRectangle.Width - vertScrollBar.Width;
 506             this.vertScrollBar.Visible = false;
 507             this.vertScrollBar.Scroll += new ScrollEventHandler(DataGridViewVScrolled);
 508             this.Controls.Add(this.vertScrollBar);
 509
 510             this.ptCurrentCell = new Point(-1, -1);
 511             this.ptAnchorCell = new Point(-1, -1);
 512             this.ptMouseDownCell = new Point(-2, -2);
 513             this.ptMouseEnteredCell = new Point(-2, -2);
 514             this.ptToolTipCell = new Point(-1, -1);
 515             this.ptMouseDownGridCoord = new Point(-1, -1);
 516
 517             this.sortOrder = SortOrder.None;
 518
 519             this.lastMouseClickInfo.timeStamp = 0;
 520
 521             WireScrollBarsEvents();
 522             PerformLayout();
 523
 524             this.toolTipControl = new DataGridViewToolTip(this);
 525
 526             Invalidate();
 527         }
 528
 529         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AdjustedTopLeftHeaderBorderStyle"]/*‘ />
 530         [
 531             Browsable(false),
 532             EditorBrowsable(EditorBrowsableState.Advanced),
 533             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
 534         ]
 535         public virtual DataGridViewAdvancedBorderStyle AdjustedTopLeftHeaderBorderStyle
 536         {
 537             get
 538             {
 539                 DataGridViewAdvancedBorderStyle dgvabs;
 540                 if (this.ApplyVisualStylesToHeaderCells)
 541                 {
 542                     switch (this.AdvancedColumnHeadersBorderStyle.All)
 543                     {
 544                         case DataGridViewAdvancedCellBorderStyle.OutsetDouble:
 545                         case DataGridViewAdvancedCellBorderStyle.OutsetPartial:
 546                             dgvabs = new DataGridViewAdvancedBorderStyle();
 547                             if (this.RightToLeftInternal)
 548                             {
 549                                 dgvabs.LeftInternal = DataGridViewAdvancedCellBorderStyle.Outset;
 550                             }
 551                             else
 552                             {
 553                                 dgvabs.LeftInternal = DataGridViewAdvancedCellBorderStyle.OutsetDouble;
 554                             }
 555                             dgvabs.RightInternal = DataGridViewAdvancedCellBorderStyle.Outset;
 556                             dgvabs.TopInternal = DataGridViewAdvancedCellBorderStyle.OutsetDouble;
 557                             dgvabs.BottomInternal = DataGridViewAdvancedCellBorderStyle.Outset;
 558                             break;
 559
 560                         case DataGridViewAdvancedCellBorderStyle.InsetDouble:
 561                             dgvabs = new DataGridViewAdvancedBorderStyle();
 562                             if (this.RightToLeftInternal)
 563                             {
 564                                 dgvabs.LeftInternal = DataGridViewAdvancedCellBorderStyle.Inset;
 565                             }
 566                             else
 567                             {
 568                                 dgvabs.LeftInternal = DataGridViewAdvancedCellBorderStyle.InsetDouble;
 569                             }
 570                             dgvabs.RightInternal = DataGridViewAdvancedCellBorderStyle.Inset;
 571                             dgvabs.TopInternal = DataGridViewAdvancedCellBorderStyle.InsetDouble;
 572                             dgvabs.BottomInternal = DataGridViewAdvancedCellBorderStyle.Inset;
 573                             break;
 574
 575                         case DataGridViewAdvancedCellBorderStyle.NotSet:
 576                             // Since the row headers are visible, we should make sure
 577                             // that there is a left/right border for the TopLeftHeaderCell no matter what.
 578                             if ((!this.RightToLeftInternal && this.AdvancedColumnHeadersBorderStyle.Left == DataGridViewAdvancedCellBorderStyle.None) ||
 579                                 (this.RightToLeftInternal && this.AdvancedColumnHeadersBorderStyle.Right == DataGridViewAdvancedCellBorderStyle.None))
 580                             {
 581                                 dgvabs = new DataGridViewAdvancedBorderStyle();
 582                                 if (this.RightToLeftInternal)
 583                                 {
 584                                     dgvabs.LeftInternal = this.AdvancedColumnHeadersBorderStyle.Left;
 585                                     dgvabs.RightInternal = this.AdvancedRowHeadersBorderStyle.Right == DataGridViewAdvancedCellBorderStyle.OutsetDouble ?
 586                                         DataGridViewAdvancedCellBorderStyle.Outset : this.AdvancedRowHeadersBorderStyle.Right;
 587                                 }
 588                                 else
 589                                 {
 590                                     dgvabs.LeftInternal = this.AdvancedRowHeadersBorderStyle.Left;
 591                                     dgvabs.RightInternal = this.AdvancedColumnHeadersBorderStyle.Right;
 592                                 }
 593                                 dgvabs.TopInternal = this.AdvancedColumnHeadersBorderStyle.Top;
 594                                 dgvabs.BottomInternal = this.AdvancedColumnHeadersBorderStyle.Bottom;
 595                             }
 596                             else
 597                             {
 598                                 dgvabs = this.AdvancedColumnHeadersBorderStyle;
 599                             }
 600                             break;
 601
 602                         default:
 603                             dgvabs = this.AdvancedColumnHeadersBorderStyle;
 604                             break;
 605                     }
 606                 }
 607                 else
 608                 {
 609                     switch (this.AdvancedColumnHeadersBorderStyle.All)
 610                     {
 611                         case DataGridViewAdvancedCellBorderStyle.OutsetDouble:
 612                         case DataGridViewAdvancedCellBorderStyle.OutsetPartial:
 613                             dgvabs = new DataGridViewAdvancedBorderStyle();
 614                             dgvabs.LeftInternal = this.RightToLeftInternal ? DataGridViewAdvancedCellBorderStyle.Outset : DataGridViewAdvancedCellBorderStyle.OutsetDouble;
 615                             dgvabs.RightInternal = this.RightToLeftInternal ? DataGridViewAdvancedCellBorderStyle.OutsetDouble : DataGridViewAdvancedCellBorderStyle.Outset;
 616                             dgvabs.TopInternal = DataGridViewAdvancedCellBorderStyle.OutsetDouble;
 617                             dgvabs.BottomInternal = DataGridViewAdvancedCellBorderStyle.Outset;
 618                             break;
 619
 620                         case DataGridViewAdvancedCellBorderStyle.InsetDouble:
 621                             dgvabs = new DataGridViewAdvancedBorderStyle();
 622                             dgvabs.LeftInternal = this.RightToLeftInternal ? DataGridViewAdvancedCellBorderStyle.Inset : DataGridViewAdvancedCellBorderStyle.InsetDouble;
 623                             dgvabs.RightInternal = this.RightToLeftInternal ? DataGridViewAdvancedCellBorderStyle.InsetDouble : DataGridViewAdvancedCellBorderStyle.Inset;
 624                             dgvabs.TopInternal = DataGridViewAdvancedCellBorderStyle.InsetDouble;
 625                             dgvabs.BottomInternal = DataGridViewAdvancedCellBorderStyle.Inset;
 626                             break;
 627
 628                         case DataGridViewAdvancedCellBorderStyle.NotSet:
 629                             // Since the row headers are visible, we should make sure
 630                             // that there is a left/right border for the TopLeftHeaderCell no matter what.
 631                             if ((!this.RightToLeftInternal && this.AdvancedColumnHeadersBorderStyle.Left == DataGridViewAdvancedCellBorderStyle.None) ||
 632                                 (this.RightToLeftInternal && this.AdvancedColumnHeadersBorderStyle.Right == DataGridViewAdvancedCellBorderStyle.None))
 633                             {
 634                                 dgvabs = new DataGridViewAdvancedBorderStyle();
 635                                 if (this.RightToLeftInternal)
 636                                 {
 637                                     dgvabs.LeftInternal = this.AdvancedColumnHeadersBorderStyle.Left;
 638                                     dgvabs.RightInternal = this.AdvancedRowHeadersBorderStyle.Right;
 639                                 }
 640                                 else
 641                                 {
 642                                     dgvabs.LeftInternal = this.AdvancedRowHeadersBorderStyle.Left;
 643                                     dgvabs.RightInternal = this.AdvancedColumnHeadersBorderStyle.Right;
 644                                 }
 645                                 dgvabs.TopInternal = this.AdvancedColumnHeadersBorderStyle.Top;
 646                                 dgvabs.BottomInternal = this.AdvancedColumnHeadersBorderStyle.Bottom;
 647                             }
 648                             else
 649                             {
 650                                 dgvabs = this.AdvancedColumnHeadersBorderStyle;
 651                             }
 652                             break;
 653
 654                         default:
 655                             dgvabs = this.AdvancedColumnHeadersBorderStyle;
 656                             break;
 657                     }
 658                 }
 659                 return dgvabs;
 660             }
 661         }
 662
 663         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AdvancedCellBorderStyle"]/*‘ />
 664         [
 665             Browsable(false),
 666             EditorBrowsable(EditorBrowsableState.Advanced)
 667         ]
 668         public DataGridViewAdvancedBorderStyle AdvancedCellBorderStyle
 669         {
 670             get
 671             {
 672                 return this.advancedCellBorderStyle;
 673             }
 674         }
 675
 676         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AdvancedColumnHeadersBorderStyle"]/*‘ />
 677         [
 678             Browsable(false),
 679             EditorBrowsable(EditorBrowsableState.Advanced)
 680         ]
 681         public DataGridViewAdvancedBorderStyle AdvancedColumnHeadersBorderStyle
 682         {
 683             get
 684             {
 685                 return this.advancedColumnHeadersBorderStyle;
 686             }
 687         }
 688
 689         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AdvancedRowHeadersBorderStyle"]/*‘ />
 690         [
 691             Browsable(false),
 692             EditorBrowsable(EditorBrowsableState.Advanced)
 693         ]
 694         public DataGridViewAdvancedBorderStyle AdvancedRowHeadersBorderStyle
 695         {
 696             get
 697             {
 698                 return this.advancedRowHeadersBorderStyle;
 699             }
 700         }
 701
 702         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToAddRows"]/*‘ />
 703         [
 704             DefaultValue(true),
 705             SRCategory(SR.CatBehavior),
 706             SRDescription(SR.DataGridView_AllowUserToAddRowsDescr)
 707         ]
 708         public bool AllowUserToAddRows
 709         {
 710             get
 711             {
 712                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_allowUserToAddRows];
 713             }
 714             set
 715             {
 716                 if (this.AllowUserToAddRows != value)
 717                 {
 718                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_allowUserToAddRows] = value;
 719                     if (this.DataSource != null)
 720                     {
 721                         this.dataConnection.ResetCachedAllowUserToAddRowsInternal();
 722                     }
 723                     OnAllowUserToAddRowsChanged(EventArgs.Empty);
 724                 }
 725             }
 726         }
 727
 728         internal bool AllowUserToAddRowsInternal
 729         {
 730             get
 731             {
 732                 if (this.DataSource == null)
 733                 {
 734                     return this.AllowUserToAddRows;
 735                 }
 736                 else
 737                 {
 738                     return this.AllowUserToAddRows && this.dataConnection.AllowAdd;
 739                 }
 740             }
 741         }
 742
 743         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToAddRowsChanged"]/*‘ />
 744         [
 745             SRCategory(SR.CatPropertyChanged),
 746             SRDescription(SR.DataGridViewOnAllowUserToAddRowsChangedDescr)
 747         ]
 748         public event EventHandler AllowUserToAddRowsChanged
 749         {
 750             add
 751             {
 752                 this.Events.AddHandler(EVENT_DATAGRIDVIEWALLOWUSERTOADDROWSCHANGED, value);
 753             }
 754             remove
 755             {
 756                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWALLOWUSERTOADDROWSCHANGED, value);
 757             }
 758         }
 759
 760         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToDeleteRows"]/*‘ />
 761         [
 762             DefaultValue(true),
 763             SRCategory(SR.CatBehavior),
 764             SRDescription(SR.DataGridView_AllowUserToDeleteRowsDescr)
 765         ]
 766         public bool AllowUserToDeleteRows
 767         {
 768             get
 769             {
 770                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_allowUserToDeleteRows];
 771             }
 772             set
 773             {
 774                 if (this.AllowUserToDeleteRows != value)
 775                 {
 776                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_allowUserToDeleteRows] = value;
 777                     OnAllowUserToDeleteRowsChanged(EventArgs.Empty);
 778                 }
 779             }
 780         }
 781
 782         internal bool AllowUserToDeleteRowsInternal
 783         {
 784             get
 785             {
 786                 if (this.DataSource == null)
 787                 {
 788                     return this.AllowUserToDeleteRows;
 789                 }
 790                 else
 791                 {
 792                     return this.AllowUserToDeleteRows && this.dataConnection.AllowRemove;
 793                 }
 794             }
 795         }
 796
 797         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToDeleteRowsChanged"]/*‘ />
 798         [
 799             SRCategory(SR.CatPropertyChanged),
 800             SRDescription(SR.DataGridViewOnAllowUserToDeleteRowsChangedDescr)
 801         ]
 802         public event EventHandler AllowUserToDeleteRowsChanged
 803         {
 804             add
 805             {
 806                 this.Events.AddHandler(EVENT_DATAGRIDVIEWALLOWUSERTODELETEROWSCHANGED, value);
 807             }
 808             remove
 809             {
 810                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWALLOWUSERTODELETEROWSCHANGED, value);
 811             }
 812         }
 813
 814         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToOrderColumns"]/*‘ />
 815         [
 816             DefaultValue(false),
 817             SRCategory(SR.CatBehavior),
 818             SRDescription(SR.DataGridView_AllowUserToOrderColumnsDescr)
 819         ]
 820         public bool AllowUserToOrderColumns
 821         {
 822             get
 823             {
 824                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_allowUserToOrderColumns];
 825             }
 826             set
 827             {
 828                 if (this.AllowUserToOrderColumns != value)
 829                 {
 830                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_allowUserToOrderColumns] = value;
 831                     OnAllowUserToOrderColumnsChanged(EventArgs.Empty);
 832                 }
 833             }
 834         }
 835
 836         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToOrderColumnsChanged"]/*‘ />
 837         [
 838             SRCategory(SR.CatPropertyChanged),
 839             SRDescription(SR.DataGridViewOnAllowUserToOrderColumnsChangedDescr)
 840         ]
 841         public event EventHandler AllowUserToOrderColumnsChanged
 842         {
 843             add
 844             {
 845                 this.Events.AddHandler(EVENT_DATAGRIDVIEWALLOWUSERTOORDERCOLUMNSCHANGED, value);
 846             }
 847             remove
 848             {
 849                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWALLOWUSERTOORDERCOLUMNSCHANGED, value);
 850             }
 851         }
 852
 853         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToResizeColumns"]/*‘ />
 854         /// <devdoc>
 855         ///    <para>
 856         ///       Gets or sets a global value indicating if the dataGridView‘s columns are resizable with the mouse.
 857         ///       The resizable aspect of a column can be overridden by DataGridViewColumn.Resizable.
 858         ///    </para>
 859         /// </devdoc>
 860         [
 861             DefaultValue(true),
 862             SRCategory(SR.CatBehavior),
 863             SRDescription(SR.DataGridView_AllowUserToResizeColumnsDescr)
 864         ]
 865         public bool AllowUserToResizeColumns
 866         {
 867             get
 868             {
 869                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_allowUserToResizeColumns];
 870             }
 871             set
 872             {
 873                 if (this.AllowUserToResizeColumns != value)
 874                 {
 875                     this.dataGridViewState2[DATAGRIDVIEWSTATE2_allowUserToResizeColumns] = value;
 876                     OnAllowUserToResizeColumnsChanged(EventArgs.Empty);
 877                 }
 878             }
 879         }
 880
 881         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToResizeColumnsChanged"]/*‘ />
 882         [
 883             SRCategory(SR.CatPropertyChanged),
 884             SRDescription(SR.DataGridViewOnAllowUserToResizeColumnsChangedDescr)
 885         ]
 886         public event EventHandler AllowUserToResizeColumnsChanged
 887         {
 888             add
 889             {
 890                 this.Events.AddHandler(EVENT_DATAGRIDVIEWALLOWUSERTORESIZECOLUMNSCHANGED, value);
 891             }
 892             remove
 893             {
 894                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWALLOWUSERTORESIZECOLUMNSCHANGED, value);
 895             }
 896         }
 897
 898         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToResizeRows"]/*‘ />
 899         /// <devdoc>
 900         ///    <para>
 901         ///       Gets or sets a global value indicating if the dataGridView‘s rows are resizable with the mouse.
 902         ///       The resizable aspect of a row can be overridden by DataGridViewRow.Resizable.
 903         ///    </para>
 904         /// </devdoc>
 905         [
 906             DefaultValue(true),
 907             SRCategory(SR.CatBehavior),
 908             SRDescription(SR.DataGridView_AllowUserToResizeRowsDescr)
 909         ]
 910         public bool AllowUserToResizeRows
 911         {
 912             get
 913             {
 914                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_allowUserToResizeRows];
 915             }
 916             set
 917             {
 918                 if (this.AllowUserToResizeRows != value)
 919                 {
 920                     this.dataGridViewState2[DATAGRIDVIEWSTATE2_allowUserToResizeRows] = value;
 921                     OnAllowUserToResizeRowsChanged(EventArgs.Empty);
 922                 }
 923             }
 924         }
 925
 926         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AllowUserToResizeRowsChanged"]/*‘ />
 927         [
 928             SRCategory(SR.CatPropertyChanged),
 929             SRDescription(SR.DataGridViewOnAllowUserToResizeRowsChangedDescr)
 930         ]
 931         public event EventHandler AllowUserToResizeRowsChanged
 932         {
 933             add
 934             {
 935                 this.Events.AddHandler(EVENT_DATAGRIDVIEWALLOWUSERTORESIZEROWSCHANGED, value);
 936             }
 937             remove
 938             {
 939                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWALLOWUSERTORESIZEROWSCHANGED, value);
 940             }
 941         }
 942
 943         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AlternatingRowsDefaultCellStyle"]/*‘ />
 944         [
 945             SRCategory(SR.CatAppearance),
 946             SRDescription(SR.DataGridView_AlternatingRowsDefaultCellStyleDescr)
 947         ]
 948         public DataGridViewCellStyle AlternatingRowsDefaultCellStyle
 949         {
 950             get
 951             {
 952                 if (this.alternatingRowsDefaultCellStyle == null)
 953                 {
 954                     this.alternatingRowsDefaultCellStyle = new DataGridViewCellStyle();
 955                     this.alternatingRowsDefaultCellStyle.AddScope(this, DataGridViewCellStyleScopes.AlternatingRows);
 956                 }
 957                 return this.alternatingRowsDefaultCellStyle;
 958             }
 959             set
 960             {
 961                 DataGridViewCellStyle cs = this.AlternatingRowsDefaultCellStyle;
 962                 cs.RemoveScope(DataGridViewCellStyleScopes.AlternatingRows);
 963                 this.alternatingRowsDefaultCellStyle = value;
 964                 if (value != null)
 965                 {
 966                     this.alternatingRowsDefaultCellStyle.AddScope(this, DataGridViewCellStyleScopes.AlternatingRows);
 967                 }
 968                 DataGridViewCellStyleDifferences dgvcsc = cs.GetDifferencesFrom(this.AlternatingRowsDefaultCellStyle);
 969                 if (dgvcsc != DataGridViewCellStyleDifferences.None)
 970                 {
 971                     this.CellStyleChangedEventArgs.ChangeAffectsPreferredSize = (dgvcsc == DataGridViewCellStyleDifferences.AffectPreferredSize);
 972                     OnAlternatingRowsDefaultCellStyleChanged(this.CellStyleChangedEventArgs);
 973                 }
 974             }
 975         }
 976
 977         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AlternatingRowsDefaultCellStyleChanged"]/*‘ />
 978         [
 979             SRCategory(SR.CatPropertyChanged),
 980             SRDescription(SR.DataGridViewAlternatingRowsDefaultCellStyleChangedDescr)
 981         ]
 982         public event EventHandler AlternatingRowsDefaultCellStyleChanged
 983         {
 984             add
 985             {
 986                 this.Events.AddHandler(EVENT_DATAGRIDVIEWALTERNATINGROWSDEFAULTCELLSTYLECHANGED, value);
 987             }
 988             remove
 989             {
 990                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWALTERNATINGROWSDEFAULTCELLSTYLECHANGED, value);
 991             }
 992         }
 993
 994         internal bool ApplyVisualStylesToInnerCells
 995         {
 996             get
 997             {
 998                 return Application.RenderWithVisualStyles;
 999             }
1000         }
1001
1002         internal bool ApplyVisualStylesToHeaderCells
1003         {
1004             get
1005             {
1006                 return Application.RenderWithVisualStyles && this.EnableHeadersVisualStyles;
1007             }
1008         }
1009
1010         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AutoGenerateColumns"]/*‘ />
1011         /// <devdoc>
1012         ///    <para>
1013         ///    </para>
1014         /// </devdoc>
1015         [
1016             Browsable(false),
1017             EditorBrowsable(EditorBrowsableState.Advanced),
1018             DefaultValue(true)
1019         ]
1020         public bool AutoGenerateColumns
1021         {
1022             get
1023             {
1024                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_autoGenerateColumns];
1025             }
1026             set{
1027                 if (this.dataGridViewState1[DATAGRIDVIEWSTATE1_autoGenerateColumns] != value)
1028                 {
1029                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_autoGenerateColumns] = value;
1030                     OnAutoGenerateColumnsChanged(EventArgs.Empty);
1031                 }
1032             }
1033         }
1034
1035         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AutoGenerateColumnsChanged"]/*‘ />
1036         [
1037             Browsable(false),
1038             EditorBrowsable(EditorBrowsableState.Advanced)
1039         ]
1040         public event EventHandler AutoGenerateColumnsChanged
1041         {
1042             add
1043             {
1044                 this.Events.AddHandler(EVENT_DATAGRIDVIEWAUTOGENERATECOLUMNSCHANGED, value);
1045             }
1046             remove
1047             {
1048                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWAUTOGENERATECOLUMNSCHANGED, value);
1049             }
1050         }
1051
1052         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AutoSize"]/*‘ />
1053         /// <devdoc>
1054         ///    <para> Overriding base implementation for perf gains. </para>
1055         /// </devdoc>
1056         public override bool AutoSize
1057         {
1058             get
1059             {
1060                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_isAutoSized];
1061             }
1062             set
1063             {
1064                 base.AutoSize = value;
1065                 this.dataGridViewState1[DATAGRIDVIEWSTATE1_isAutoSized] = value;
1066             }
1067         }
1068
1069         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AutoSizeColumnsMode"]/*‘ />
1070         /// <devdoc>
1071         ///    <para> Gets or sets the columns‘ autosizing mode. Standard inheritance model is used:
1072         ///           Columns with AutoSizeMode property set to NotSet will use this auto size mode.
1073         ///    </para>
1074         /// </devdoc>
1075         [
1076             DefaultValue(DataGridViewAutoSizeColumnsMode.None),
1077             SRCategory(SR.CatLayout),
1078             SRDescription(SR.DataGridView_AutoSizeColumnsModeDescr)
1079         ]
1080         public DataGridViewAutoSizeColumnsMode AutoSizeColumnsMode
1081         {
1082             get
1083             {
1084                 return this.autoSizeColumnsMode;
1085             }
1086
1087             set
1088             {
1089                 switch (value)
1090                 {
1091                     case DataGridViewAutoSizeColumnsMode.None:
1092                     case DataGridViewAutoSizeColumnsMode.ColumnHeader:
1093                     case DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader:
1094                     case DataGridViewAutoSizeColumnsMode.AllCells:
1095                     case DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader:
1096                     case DataGridViewAutoSizeColumnsMode.DisplayedCells:
1097                     case DataGridViewAutoSizeColumnsMode.Fill:
1098                         break;
1099                     default:
1100                         throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAutoSizeColumnsMode));
1101                  }
1102
1103
1104                 if (this.autoSizeColumnsMode != value)
1105                 {
1106                     foreach (DataGridViewColumn dataGridViewColumn in this.Columns)
1107                     {
1108                         if (dataGridViewColumn.AutoSizeMode == DataGridViewAutoSizeColumnMode.NotSet && dataGridViewColumn.Visible)
1109                         {
1110                             // Make sure there is no visible column which would have an inherited autosize mode based on the header only.
1111                             if (value == DataGridViewAutoSizeColumnsMode.ColumnHeader && !this.ColumnHeadersVisible)
1112                             {
1113                                 throw new InvalidOperationException(SR.GetString(SR.DataGridView_CannotAutoSizeColumnsInvisibleColumnHeaders));
1114                             }
1115                             // Make sure there is no visible frozen column which would have a Fill inherited autosize mode.
1116                             if (value == DataGridViewAutoSizeColumnsMode.Fill && dataGridViewColumn.Frozen)
1117                             {
1118                                 throw new InvalidOperationException(SR.GetString(SR.DataGridView_CannotAutoFillFrozenColumns));
1119                             }
1120                         }
1121                     }
1122                     DataGridViewAutoSizeColumnMode[] previousModes = new DataGridViewAutoSizeColumnMode[this.Columns.Count];
1123                     foreach (DataGridViewColumn dataGridViewColumn in this.Columns)
1124                     {
1125                         /*DataGridViewAutoSizeColumnMode previousInheritedMode = dataGridViewColumn.InheritedAutoSizeMode;
1126                         bool previousInheritedModeAutoSized = previousInheritedMode != DataGridViewAutoSizeColumnMode.Fill &&
1127                                                               previousInheritedMode != DataGridViewAutoSizeColumnMode.None &&
1128                                                               previousInheritedMode != DataGridViewAutoSizeColumnMode.NotSet;*/
1129                         previousModes[dataGridViewColumn.Index] = dataGridViewColumn.InheritedAutoSizeMode;
1130                     }
1131                     DataGridViewAutoSizeColumnsModeEventArgs dgvcasme = new DataGridViewAutoSizeColumnsModeEventArgs(previousModes);
1132                     this.autoSizeColumnsMode = value;
1133                     OnAutoSizeColumnsModeChanged(dgvcasme);
1134                 }
1135             }
1136         }
1137
1138         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AutoSizeColumnsModeChanged"]/*‘ />
1139         [
1140             SRCategory(SR.CatPropertyChanged),
1141             SRDescription(SR.DataGridViewAutoSizeColumnsModeChangedDescr)
1142         ]
1143         public event DataGridViewAutoSizeColumnsModeEventHandler AutoSizeColumnsModeChanged
1144         {
1145             add
1146             {
1147                 this.Events.AddHandler(EVENT_DATAGRIDVIEWAUTOSIZECOLUMNSMODECHANGED, value);
1148             }
1149             remove
1150             {
1151                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWAUTOSIZECOLUMNSMODECHANGED, value);
1152             }
1153         }
1154
1155         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AutoSizeRowsMode"]/*‘ />
1156         /// <devdoc>
1157         ///    <para> Gets or sets the rows‘ autosizing mode. </para>
1158         /// </devdoc>
1159         [
1160             DefaultValue(DataGridViewAutoSizeRowsMode.None),
1161             SRCategory(SR.CatLayout),
1162             SRDescription(SR.DataGridView_AutoSizeRowsModeDescr)
1163         ]
1164         public DataGridViewAutoSizeRowsMode AutoSizeRowsMode
1165         {
1166             get
1167             {
1168                 return this.autoSizeRowsMode;
1169             }
1170             set
1171             {
1172                 switch (value)
1173                 {
1174                    case DataGridViewAutoSizeRowsMode.None:
1175                    case DataGridViewAutoSizeRowsMode.AllHeaders:
1176                    case DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders:
1177                    case DataGridViewAutoSizeRowsMode.AllCells:
1178                    case DataGridViewAutoSizeRowsMode.DisplayedHeaders:
1179                    case DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders:
1180                    case DataGridViewAutoSizeRowsMode.DisplayedCells:
1181                        break;
1182                    default:
1183                        throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAutoSizeRowsMode));
1184                 }
1185                 if ((value == DataGridViewAutoSizeRowsMode.AllHeaders || value == DataGridViewAutoSizeRowsMode.DisplayedHeaders) &&
1186                     !this.RowHeadersVisible)
1187                 {
1188                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_CannotAutoSizeRowsInvisibleRowHeader));
1189                 }
1190                 if (this.autoSizeRowsMode != value)
1191                 {
1192                     DataGridViewAutoSizeModeEventArgs dgvasme = new DataGridViewAutoSizeModeEventArgs(this.autoSizeRowsMode != DataGridViewAutoSizeRowsMode.None);
1193                     this.autoSizeRowsMode = value;
1194                     OnAutoSizeRowsModeChanged(dgvasme);
1195                 }
1196             }
1197         }
1198
1199         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AutoSizeRowsModeChanged"]/*‘ />
1200         [
1201             SRCategory(SR.CatPropertyChanged),
1202             SRDescription(SR.DataGridViewAutoSizeRowsModeChangedDescr)
1203         ]
1204         public event DataGridViewAutoSizeModeEventHandler AutoSizeRowsModeChanged
1205         {
1206             add
1207             {
1208                 this.Events.AddHandler(EVENT_DATAGRIDVIEWAUTOSIZEROWSMODECHANGED, value);
1209             }
1210             remove
1211             {
1212                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWAUTOSIZEROWSMODECHANGED, value);
1213             }
1214         }
1215
1216         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BackColor"]/*‘ />
1217         /// <internalonly/>
1218         [
1219             Browsable(false),
1220             EditorBrowsable(EditorBrowsableState.Never),
1221             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
1222         ]
1223         public override Color BackColor
1224         {
1225             get
1226             {
1227                 return base.BackColor;
1228             }
1229             set
1230             {
1231                 base.BackColor = value;
1232             }
1233         }
1234
1235         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BackColorChanged"]/*‘ />
1236         /// <internalonly/>
1237         [
1238             Browsable(false),
1239             EditorBrowsable(EditorBrowsableState.Never)
1240         ]
1241         new public event EventHandler BackColorChanged
1242         {
1243             add
1244             {
1245                 base.BackColorChanged += value;
1246             }
1247             remove
1248             {
1249                 base.BackColorChanged -= value;
1250             }
1251         }
1252
1253         internal SolidBrush BackgroundBrush
1254         {
1255             get
1256             {
1257                 return this.backgroundBrush;
1258             }
1259         }
1260
1261         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BackgroundColor"]/*‘ />
1262         /// <devdoc>
1263         ///    <para>Gets or sets the background color of the dataGridView.</para>
1264         /// </devdoc>
1265         [
1266             SRCategory(SR.CatAppearance),
1267             SRDescription(SR.DataGridViewBackgroundColorDescr)
1268         ]
1269         public Color BackgroundColor
1270         {
1271             get
1272             {
1273                 return this.backgroundBrush.Color;
1274             }
1275             set
1276             {
1277                 if (value.IsEmpty)
1278                 {
1279                     throw new ArgumentException(SR.GetString(SR.DataGridView_EmptyColor, "BackgroundColor"));
1280                 }
1281                 if (value.A < 255)
1282                 {
1283                     throw new ArgumentException(SR.GetString(SR.DataGridView_TransparentColor, "BackgroundColor"));
1284                 }
1285                 if (!value.Equals(this.backgroundBrush.Color))
1286                 {
1287                     this.backgroundBrush = new SolidBrush(value);
1288                     OnBackgroundColorChanged(EventArgs.Empty);
1289                 }
1290             }
1291         }
1292
1293         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BackgroundColorChanged"]/*‘ />
1294         [
1295             SRCategory(SR.CatPropertyChanged),
1296             SRDescription(SR.DataGridViewBackgroundColorChangedDescr)
1297         ]
1298         public event EventHandler BackgroundColorChanged
1299         {
1300             add
1301             {
1302                 this.Events.AddHandler(EVENT_DATAGRIDVIEWBACKGROUNDCOLORCHANGED, value);
1303             }
1304             remove
1305             {
1306                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWBACKGROUNDCOLORCHANGED, value);
1307             }
1308         }
1309
1310         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BackgroundImage"]/*‘ />
1311         [
1312             Browsable(false),
1313             EditorBrowsable(EditorBrowsableState.Never)
1314         ]
1315         public override Image BackgroundImage
1316         {
1317             get
1318             {
1319                 return base.BackgroundImage;
1320             }
1321             set
1322             {
1323                 base.BackgroundImage = value;
1324             }
1325         }
1326
1327         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BackgroundImageLayout"]/*‘ />
1328         [
1329             Browsable(false),
1330             EditorBrowsable(EditorBrowsableState.Never)
1331         ]
1332         public override ImageLayout BackgroundImageLayout
1333         {
1334             get
1335             {
1336                 return base.BackgroundImageLayout;
1337             }
1338             set
1339             {
1340                 base.BackgroundImageLayout = value;
1341             }
1342         }
1343
1344         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BackgroundImageChanged"]/*‘ />
1345         [
1346             Browsable(false),
1347             EditorBrowsable(EditorBrowsableState.Never)
1348         ]
1349         new public event EventHandler BackgroundImageChanged
1350         {
1351             add
1352             {
1353                 base.BackgroundImageChanged += value;
1354             }
1355             remove
1356             {
1357                 base.BackgroundImageChanged -= value;
1358             }
1359         }
1360
1361         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BackgroundImageLayoutChanged"]/*‘ />
1362         [
1363             Browsable(false),
1364             EditorBrowsable(EditorBrowsableState.Never)
1365         ]
1366         new public event EventHandler BackgroundImageLayoutChanged
1367         {
1368             add
1369             {
1370                 base.BackgroundImageLayoutChanged += value;
1371             }
1372             remove
1373             {
1374                 base.BackgroundImageLayoutChanged -= value;
1375             }
1376         }
1377
1378         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ShouldSerializeBackgroundColor"]/*‘ />
1379         private bool ShouldSerializeBackgroundColor()
1380         {
1381             return !this.BackgroundColor.Equals(DefaultBackgroundBrush.Color);
1382         }
1383
1384         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BorderStyle"]/*‘ />
1385         [
1386             DefaultValue(BorderStyle.FixedSingle),
1387             SRCategory(SR.CatAppearance),
1388             SRDescription(SR.DataGridView_BorderStyleDescr)
1389         ]
1390         public BorderStyle BorderStyle
1391         {
1392             get
1393             {
1394                 return this.borderStyle;
1395             }
1396             set
1397             {
1398                 // Sequential enum.  Valid values are 0x0 to 0x2
1399                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)BorderStyle.None, (int)BorderStyle.Fixed3D)){
1400                     throw new InvalidEnumArgumentException("value", (int)value, typeof(BorderStyle));
1401                 }
1402                 if (this.borderStyle != value)
1403                 {
1404                     using (LayoutTransaction.CreateTransactionIf(this.AutoSize, this.ParentInternal, this, PropertyNames.BorderStyle))
1405                     {
1406                         this.borderStyle = value;
1407                         if (!this.AutoSize)
1408                         {
1409                             PerformLayoutPrivate(false /*useRowShortcut*/, false /*computeVisibleRows*/, true /*invalidInAdjustFillingColumns*/, true /*repositionEditingControl*/);
1410                         }
1411                         Invalidate();
1412                         OnBorderStyleChanged(EventArgs.Empty);
1413                     }
1414                 }
1415             }
1416         }
1417
1418         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BorderStyleChanged"]/*‘ />
1419         [
1420             SRCategory(SR.CatPropertyChanged),
1421             SRDescription(SR.DataGridViewBorderStyleChangedDescr)
1422         ]
1423         public event EventHandler BorderStyleChanged
1424         {
1425             add
1426             {
1427                 this.Events.AddHandler(EVENT_DATAGRIDVIEWBORDERSTYLECHANGED, value);
1428             }
1429             remove
1430             {
1431                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWBORDERSTYLECHANGED, value);
1432             }
1433         }
1434
1435         private int BorderWidth
1436         {
1437             get
1438             {
1439                 if (this.BorderStyle == BorderStyle.Fixed3D)
1440                 {
1441                     return Application.RenderWithVisualStyles ? 1 : SystemInformation.Border3DSize.Width;
1442                 }
1443                 else if (this.BorderStyle == BorderStyle.FixedSingle)
1444                 {
1445                     return 1;
1446                 }
1447                 else
1448                 {
1449                     return 0;
1450                 }
1451             }
1452         }
1453
1454         // Ime can be shown when there is a read-write current cell.
1455         protected override bool CanEnableIme
1456         {
1457             get
1458             {
1459                 bool canEnable = false;
1460
1461                 Debug.WriteLineIf( CompModSwitches.ImeMode.Level >= TraceLevel.Info, "Inside get_CanEnableIme(), this = " + this );
1462                 Debug.Indent();
1463
1464                 if (this.ptCurrentCell.X != -1 /*&& !this.IsCurrentCellInEditMode*/ && ColumnEditable(this.ptCurrentCell.X))
1465                 {
1466                     DataGridViewCell dataGridViewCell = this.CurrentCellInternal;
1467                     Debug.Assert(dataGridViewCell != null);
1468
1469                     if (!IsSharedCellReadOnly(dataGridViewCell, this.ptCurrentCell.Y))
1470                     {
1471                         canEnable = base.CanEnableIme;
1472                     }
1473                 }
1474
1475                 Debug.WriteLineIf( CompModSwitches.ImeMode.Level >= TraceLevel.Info, "Value = " + canEnable );
1476                 Debug.Unindent();
1477
1478                 return canEnable;
1479             }
1480         }
1481
1482         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AdvancedCellBorderStyle"]/*‘ />
1483         [
1484             SRCategory(SR.CatAppearance),
1485             SRDescription(SR.DataGridView_CellBorderStyleDescr),
1486             Browsable(true),
1487             DefaultValue(DataGridViewCellBorderStyle.Single)
1488         ]
1489         public DataGridViewCellBorderStyle CellBorderStyle
1490         {
1491             get
1492             {
1493                 switch (this.advancedCellBorderStyle.All)
1494                 {
1495                     case DataGridViewAdvancedCellBorderStyle.NotSet:
1496                         if (this.advancedCellBorderStyle.Top == DataGridViewAdvancedCellBorderStyle.None &&
1497                             this.advancedCellBorderStyle.Bottom == DataGridViewAdvancedCellBorderStyle.None)
1498                         {
1499                             if (this.RightToLeftInternal)
1500                             {
1501                                 if (this.advancedCellBorderStyle.Right == DataGridViewAdvancedCellBorderStyle.None &&
1502                                     this.advancedCellBorderStyle.Left == DataGridViewAdvancedCellBorderStyle.Single)
1503                                 {
1504                                     return DataGridViewCellBorderStyle.SingleVertical;
1505                                 }
1506                             }
1507                             else
1508                             {
1509                                 if (this.advancedCellBorderStyle.Left == DataGridViewAdvancedCellBorderStyle.None &&
1510                                     this.advancedCellBorderStyle.Right == DataGridViewAdvancedCellBorderStyle.Single)
1511                                 {
1512                                     return DataGridViewCellBorderStyle.SingleVertical;
1513                                 }
1514                             }
1515                             if (this.advancedCellBorderStyle.Right == DataGridViewAdvancedCellBorderStyle.Outset &&
1516                                 this.advancedCellBorderStyle.Left == DataGridViewAdvancedCellBorderStyle.Outset)
1517                             {
1518                                 return DataGridViewCellBorderStyle.RaisedVertical;
1519                             }
1520                             if (this.advancedCellBorderStyle.Right == DataGridViewAdvancedCellBorderStyle.Inset &&
1521                                 this.advancedCellBorderStyle.Left == DataGridViewAdvancedCellBorderStyle.Inset)
1522                             {
1523                                 return DataGridViewCellBorderStyle.SunkenVertical;
1524                             }
1525                         }
1526                         if (this.advancedCellBorderStyle.Left == DataGridViewAdvancedCellBorderStyle.None &&
1527                             this.advancedCellBorderStyle.Right == DataGridViewAdvancedCellBorderStyle.None)
1528                         {
1529                             if (this.advancedCellBorderStyle.Top == DataGridViewAdvancedCellBorderStyle.None &&
1530                                 this.advancedCellBorderStyle.Bottom == DataGridViewAdvancedCellBorderStyle.Single)
1531                             {
1532                                 return DataGridViewCellBorderStyle.SingleHorizontal;
1533                             }
1534                             if (this.advancedCellBorderStyle.Top == DataGridViewAdvancedCellBorderStyle.Outset &&
1535                                 this.advancedCellBorderStyle.Bottom == DataGridViewAdvancedCellBorderStyle.Outset)
1536                             {
1537                                 return DataGridViewCellBorderStyle.RaisedHorizontal;
1538                             }
1539                             if (this.advancedCellBorderStyle.Top == DataGridViewAdvancedCellBorderStyle.Inset &&
1540                                 this.advancedCellBorderStyle.Bottom == DataGridViewAdvancedCellBorderStyle.Inset)
1541                             {
1542                                 return DataGridViewCellBorderStyle.SunkenHorizontal;
1543                             }
1544                         }
1545                         return DataGridViewCellBorderStyle.Custom;
1546
1547                     case DataGridViewAdvancedCellBorderStyle.None:
1548                         return DataGridViewCellBorderStyle.None;
1549
1550                     case DataGridViewAdvancedCellBorderStyle.Single:
1551                         return DataGridViewCellBorderStyle.Single;
1552
1553                     case DataGridViewAdvancedCellBorderStyle.Inset:
1554                         return DataGridViewCellBorderStyle.Sunken;
1555
1556                     case DataGridViewAdvancedCellBorderStyle.Outset:
1557                         return DataGridViewCellBorderStyle.Raised;
1558
1559                     default:
1560                         Debug.Fail("Unexpected this.advancedCellBorderStyle.All value in CellBorderStyle.get");
1561                         return DataGridViewCellBorderStyle.Custom;
1562                 }
1563             }
1564             set
1565             {
1566                 // Sequential enum.  Valid values are 0x0 to 0xa
1567                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewCellBorderStyle.Custom, (int)DataGridViewCellBorderStyle.SunkenHorizontal))
1568                 {
1569                      throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewCellBorderStyle));
1570                 }
1571
1572                 if (value != this.CellBorderStyle)
1573                 {
1574                     if (value == DataGridViewCellBorderStyle.Custom)
1575                     {
1576                         throw new ArgumentException(SR.GetString(SR.DataGridView_CustomCellBorderStyleInvalid, "CellBorderStyle"));
1577                     }
1578                     this.dataGridViewOper[DATAGRIDVIEWOPER_inBorderStyleChange] = true;
1579                     try
1580                     {
1581                         switch (value)
1582                         {
1583                             case DataGridViewCellBorderStyle.Single:
1584                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.Single;
1585                                 break;
1586
1587                             case DataGridViewCellBorderStyle.Raised:
1588                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.Outset;
1589                                 break;
1590
1591                             case DataGridViewCellBorderStyle.Sunken:
1592                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.Inset;
1593                                 break;
1594
1595                             case DataGridViewCellBorderStyle.None:
1596                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
1597                                 break;
1598
1599                             case DataGridViewCellBorderStyle.SingleVertical:
1600                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
1601                                 if (this.RightToLeftInternal)
1602                                 {
1603                                     this.advancedCellBorderStyle.LeftInternal = DataGridViewAdvancedCellBorderStyle.Single;
1604                                 }
1605                                 else
1606                                 {
1607                                     this.advancedCellBorderStyle.RightInternal = DataGridViewAdvancedCellBorderStyle.Single;
1608                                 }
1609                                 break;
1610
1611                             case DataGridViewCellBorderStyle.RaisedVertical:
1612                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
1613                                 this.advancedCellBorderStyle.RightInternal = DataGridViewAdvancedCellBorderStyle.Outset;
1614                                 this.advancedCellBorderStyle.LeftInternal = DataGridViewAdvancedCellBorderStyle.Outset;
1615                                 break;
1616
1617                             case DataGridViewCellBorderStyle.SunkenVertical:
1618                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
1619                                 this.advancedCellBorderStyle.RightInternal = DataGridViewAdvancedCellBorderStyle.Inset;
1620                                 this.advancedCellBorderStyle.LeftInternal = DataGridViewAdvancedCellBorderStyle.Inset;
1621                                 break;
1622
1623                             case DataGridViewCellBorderStyle.SingleHorizontal:
1624                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
1625                                 this.advancedCellBorderStyle.BottomInternal = DataGridViewAdvancedCellBorderStyle.Single;
1626                                 break;
1627
1628                             case DataGridViewCellBorderStyle.RaisedHorizontal:
1629                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
1630                                 this.advancedCellBorderStyle.TopInternal = DataGridViewAdvancedCellBorderStyle.Outset;
1631                                 this.advancedCellBorderStyle.BottomInternal = DataGridViewAdvancedCellBorderStyle.Outset;
1632                                 break;
1633
1634                             case DataGridViewCellBorderStyle.SunkenHorizontal:
1635                                 this.advancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
1636                                 this.advancedCellBorderStyle.TopInternal = DataGridViewAdvancedCellBorderStyle.Inset;
1637                                 this.advancedCellBorderStyle.BottomInternal = DataGridViewAdvancedCellBorderStyle.Inset;
1638                                 break;
1639                         }
1640                     }
1641                     finally
1642                     {
1643                         this.dataGridViewOper[DATAGRIDVIEWOPER_inBorderStyleChange] = false;
1644                     }
1645                     OnCellBorderStyleChanged(EventArgs.Empty);
1646                 }
1647             }
1648         }
1649
1650         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellBorderStyleChanged"]/*‘ />
1651         [
1652             SRCategory(SR.CatPropertyChanged),
1653             SRDescription(SR.DataGridView_CellBorderStyleChangedDescr)
1654         ]
1655         public event EventHandler CellBorderStyleChanged
1656         {
1657             add
1658             {
1659                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLBORDERSTYLECHANGED, value);
1660             }
1661             remove
1662             {
1663                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLBORDERSTYLECHANGED, value);
1664             }
1665         }
1666
1667         internal bool CellMouseDownInContentBounds
1668         {
1669             get
1670             {
1671                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_cellMouseDownInContentBounds];
1672             }
1673             set
1674             {
1675                 this.dataGridViewState2[DATAGRIDVIEWSTATE2_cellMouseDownInContentBounds] = value;
1676             }
1677         }
1678
1679         internal DataGridViewCellPaintingEventArgs CellPaintingEventArgs
1680         {
1681             get
1682             {
1683                 if (this.dgvcpe == null)
1684                 {
1685                     this.dgvcpe = new DataGridViewCellPaintingEventArgs(this);
1686                 }
1687                 return this.dgvcpe;
1688             }
1689         }
1690
1691         private DataGridViewCellStyleChangedEventArgs CellStyleChangedEventArgs
1692         {
1693             get
1694             {
1695                 if (this.dgvcsce == null)
1696                 {
1697                     this.dgvcsce = new DataGridViewCellStyleChangedEventArgs();
1698                 }
1699                 return this.dgvcsce;
1700             }
1701         }
1702
1703         internal DataGridViewCellValueEventArgs CellValueEventArgs
1704         {
1705             get
1706             {
1707                 if (this.dgvcve == null)
1708                 {
1709                     this.dgvcve = new DataGridViewCellValueEventArgs();
1710                 }
1711                 return this.dgvcve;
1712             }
1713         }
1714
1715         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ClipboardCopyMode"]/*‘ />
1716         [
1717             Browsable(true),
1718             DefaultValue(DataGridViewClipboardCopyMode.EnableWithAutoHeaderText),
1719             SRCategory(SR.CatBehavior),
1720             SRDescription(SR.DataGridView_ClipboardCopyModeDescr)
1721         ]
1722         public DataGridViewClipboardCopyMode ClipboardCopyMode
1723         {
1724             get
1725             {
1726                 return this.clipboardCopyMode;
1727             }
1728             set
1729             {
1730                 // Sequential enum.  Valid values are 0x0 to 0x3
1731                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewClipboardCopyMode.Disable, (int)DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText))
1732                 {
1733                    throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewClipboardCopyMode));
1734                 }
1735                 this.clipboardCopyMode = value;
1736             }
1737         }
1738
1739         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnCount"]/*‘ />
1740         [
1741             Browsable(false),
1742             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
1743             DefaultValue(0),
1744             EditorBrowsable(EditorBrowsableState.Advanced)
1745         ]
1746         public int ColumnCount
1747         {
1748             get
1749             {
1750                 return this.Columns.Count;
1751             }
1752             set
1753             {
1754                 if (value < 0)
1755                 {
1756                     throw new ArgumentOutOfRangeException("ColumnCount", SR.GetString(SR.InvalidLowBoundArgumentEx, "ColumnCount", value.ToString(CultureInfo.CurrentCulture), (0).ToString(CultureInfo.CurrentCulture)));
1757                 }
1758                 if (this.DataSource != null)
1759                 {
1760                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_CannotSetColumnCountOnDataBoundDataGridView));
1761                 }
1762                 if (value != this.Columns.Count)
1763                 {
1764                     if (value == 0)
1765                     {
1766                         // Total removal of the columns. This also clears the rows.
1767                         this.Columns.Clear();
1768                     }
1769                     else if (value < this.Columns.Count)
1770                     {
1771                         // Some columns need to be removed, from the tail of the columns collection
1772                         while (value < this.Columns.Count)
1773                         {
1774                             int currentColumnCount = this.Columns.Count;
1775                             this.Columns.RemoveAt(currentColumnCount - 1);
1776                             if (this.Columns.Count >= currentColumnCount)
1777                             {
1778                                 // Column removal failed. We stop the loop.
1779                                 break;
1780                             }
1781                         }
1782                     }
1783                     else
1784                     {
1785                         // Some DataGridViewTextBoxColumn columns need to be appened.
1786                         while (value > this.Columns.Count)
1787                         {
1788                             int currentColumnCount = this.Columns.Count;
1789                             this.Columns.Add(null /*columnName*/, null /*headerText*/);
1790                             if (this.Columns.Count <= currentColumnCount)
1791                             {
1792                                 // Column addition failed. We stop the loop.
1793                                 break;
1794                             }
1795                         }
1796                     }
1797                 }
1798             }
1799         }
1800
1801         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeadersBorderStyle"]/*‘ />
1802         [
1803             SRCategory(SR.CatAppearance),
1804             SRDescription(SR.DataGridView_ColumnHeadersBorderStyleDescr),
1805             Browsable(true),
1806             DefaultValue(DataGridViewHeaderBorderStyle.Raised)
1807         ]
1808         public DataGridViewHeaderBorderStyle ColumnHeadersBorderStyle
1809         {
1810             get
1811             {
1812                 switch (this.advancedColumnHeadersBorderStyle.All)
1813                 {
1814                     case DataGridViewAdvancedCellBorderStyle.NotSet:
1815                         return DataGridViewHeaderBorderStyle.Custom;
1816
1817                     case DataGridViewAdvancedCellBorderStyle.None:
1818                         return DataGridViewHeaderBorderStyle.None;
1819
1820                     case DataGridViewAdvancedCellBorderStyle.Single:
1821                         return DataGridViewHeaderBorderStyle.Single;
1822
1823                     case DataGridViewAdvancedCellBorderStyle.InsetDouble:
1824                         return DataGridViewHeaderBorderStyle.Sunken;
1825
1826                     case DataGridViewAdvancedCellBorderStyle.OutsetPartial:
1827                         return DataGridViewHeaderBorderStyle.Raised;
1828
1829                     default:
1830                         return DataGridViewHeaderBorderStyle.Custom;
1831                 }
1832             }
1833             set
1834             {
1835                 // Sequential enum.  Valid values are 0x0 to 0x4
1836                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewHeaderBorderStyle.Custom, (int)DataGridViewHeaderBorderStyle.None))
1837                 {
1838                     throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewHeaderBorderStyle));
1839                 }
1840                 if (value != this.ColumnHeadersBorderStyle)
1841                 {
1842                     if (value == DataGridViewHeaderBorderStyle.Custom)
1843                     {
1844                         throw new ArgumentException(SR.GetString(SR.DataGridView_CustomCellBorderStyleInvalid, "ColumnHeadersBorderStyle"));
1845                     }
1846                     this.dataGridViewOper[DATAGRIDVIEWOPER_inBorderStyleChange] = true;
1847                     try
1848                     {
1849                         switch (value)
1850                         {
1851                             case DataGridViewHeaderBorderStyle.Single:
1852                                 this.advancedColumnHeadersBorderStyle.All = DataGridViewAdvancedCellBorderStyle.Single;
1853                                 break;
1854
1855                             case DataGridViewHeaderBorderStyle.Raised:
1856                                 this.advancedColumnHeadersBorderStyle.All = DataGridViewAdvancedCellBorderStyle.OutsetPartial;
1857                                 break;
1858
1859                             case DataGridViewHeaderBorderStyle.Sunken:
1860                                 this.advancedColumnHeadersBorderStyle.All = DataGridViewAdvancedCellBorderStyle.InsetDouble;
1861                                 break;
1862
1863                             case DataGridViewHeaderBorderStyle.None:
1864                                 this.advancedColumnHeadersBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
1865                                 break;
1866                         }
1867                     }
1868                     finally
1869                     {
1870                         this.dataGridViewOper[DATAGRIDVIEWOPER_inBorderStyleChange] = false;
1871                     }
1872                     OnColumnHeadersBorderStyleChanged(EventArgs.Empty);
1873                 }
1874             }
1875         }
1876
1877         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeadersBorderStyleChanged"]/*‘ />
1878         [
1879             SRCategory(SR.CatPropertyChanged),
1880             SRDescription(SR.DataGridView_ColumnHeadersBorderStyleChangedDescr)
1881         ]
1882         public event EventHandler ColumnHeadersBorderStyleChanged
1883         {
1884             add
1885             {
1886                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERSBORDERSTYLECHANGED, value);
1887             }
1888             remove
1889             {
1890                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERSBORDERSTYLECHANGED, value);
1891             }
1892         }
1893
1894         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeadersDefaultCellStyle"]/*‘ />
1895         [
1896             SRCategory(SR.CatAppearance),
1897             SRDescription(SR.DataGridView_ColumnHeadersDefaultCellStyleDescr),
1898             AmbientValue(null)
1899         ]
1900         public DataGridViewCellStyle ColumnHeadersDefaultCellStyle
1901         {
1902             get
1903             {
1904                 if (this.columnHeadersDefaultCellStyle == null)
1905                 {
1906                     this.columnHeadersDefaultCellStyle = this.DefaultColumnHeadersDefaultCellStyle;
1907                 }
1908                 return this.columnHeadersDefaultCellStyle;
1909             }
1910             set
1911             {
1912                 DataGridViewCellStyle cs = this.ColumnHeadersDefaultCellStyle;
1913                 cs.RemoveScope(DataGridViewCellStyleScopes.ColumnHeaders);
1914                 this.columnHeadersDefaultCellStyle = value;
1915                 if (value != null)
1916                 {
1917                     this.columnHeadersDefaultCellStyle.AddScope(this, DataGridViewCellStyleScopes.ColumnHeaders);
1918                 }
1919                 DataGridViewCellStyleDifferences dgvcsc = cs.GetDifferencesFrom(this.ColumnHeadersDefaultCellStyle);
1920                 if (dgvcsc != DataGridViewCellStyleDifferences.None)
1921                 {
1922                     this.CellStyleChangedEventArgs.ChangeAffectsPreferredSize = (dgvcsc == DataGridViewCellStyleDifferences.AffectPreferredSize);
1923                     OnColumnHeadersDefaultCellStyleChanged(this.CellStyleChangedEventArgs);
1924                 }
1925             }
1926         }
1927
1928         private DataGridViewCellStyle DefaultColumnHeadersDefaultCellStyle {
1929             get
1930             {
1931                 DataGridViewCellStyle defaultStyle = new DataGridViewCellStyle();
1932                 defaultStyle.BackColor = DefaultHeadersBackBrush.Color;
1933                 defaultStyle.ForeColor = DefaultForeBrush.Color;
1934                 defaultStyle.SelectionBackColor = DefaultSelectionBackBrush.Color;
1935                 defaultStyle.SelectionForeColor = DefaultSelectionForeBrush.Color;
1936                 defaultStyle.Font = base.Font;
1937                 defaultStyle.AlignmentInternal = DataGridViewContentAlignment.MiddleLeft;
1938                 defaultStyle.WrapModeInternal = DataGridViewTriState.True;
1939                 defaultStyle.AddScope(this, DataGridViewCellStyleScopes.ColumnHeaders);
1940
1941                 this.dataGridViewState1[DATAGRIDVIEWSTATE1_ambientColumnHeadersFont] = true;
1942
1943                 return defaultStyle;
1944             }
1945         }
1946
1947         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeadersDefaultCellStyleChanged"]/*‘ />
1948         [
1949             SRCategory(SR.CatPropertyChanged),
1950             SRDescription(SR.DataGridViewColumnHeadersDefaultCellStyleChangedDescr)
1951         ]
1952         public event EventHandler ColumnHeadersDefaultCellStyleChanged
1953         {
1954             add
1955             {
1956                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERSDEFAULTCELLSTYLECHANGED, value);
1957             }
1958             remove
1959             {
1960                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERSDEFAULTCELLSTYLECHANGED, value);
1961             }
1962         }
1963
1964         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeadersHeight"]/*‘ />
1965         [
1966             SRCategory(SR.CatAppearance),
1967             Localizable(true),
1968             SRDescription(SR.DataGridView_ColumnHeadersHeightDescr)
1969         ]
1970         public int ColumnHeadersHeight
1971         {
1972             get
1973             {
1974                 return this.columnHeadersHeight;
1975             }
1976             set
1977             {
1978                 if (value < minimumColumnHeadersHeight)
1979                 {
1980                     throw new ArgumentOutOfRangeException("ColumnHeadersHeight", SR.GetString(SR.InvalidLowBoundArgumentEx, "ColumnHeadersHeight", (value).ToString(CultureInfo.CurrentCulture), (minimumColumnHeadersHeight).ToString(CultureInfo.CurrentCulture)));
1981                 }
1982                 if (value > maxHeadersThickness)
1983                 {
1984                     throw new ArgumentOutOfRangeException("ColumnHeadersHeight", SR.GetString(SR.InvalidHighBoundArgumentEx, "ColumnHeadersHeight", (value).ToString(CultureInfo.CurrentCulture), (maxHeadersThickness).ToString(CultureInfo.CurrentCulture)));
1985                 }
1986                 if (this.ColumnHeadersHeightSizeMode == DataGridViewColumnHeadersHeightSizeMode.AutoSize)
1987                 {
1988                     this.cachedColumnHeadersHeight = value;
1989                 }
1990                 else if (this.columnHeadersHeight != value)
1991                 {
1992                     SetColumnHeadersHeightInternal(value, true /*invalidInAdjustFillingColumns*/);
1993                 }
1994             }
1995         }
1996
1997         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeadersHeightChanged"]/*‘ />
1998         [
1999             SRCategory(SR.CatPropertyChanged),
2000             SRDescription(SR.DataGridViewColumnHeadersHeightChangedDescr)
2001         ]
2002         public event EventHandler ColumnHeadersHeightChanged
2003         {
2004             add
2005             {
2006                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERSHEIGHTCHANGED, value);
2007             }
2008             remove
2009             {
2010                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERSHEIGHTCHANGED, value);
2011             }
2012         }
2013
2014         private bool ShouldSerializeColumnHeadersHeight()
2015         {
2016             return this.ColumnHeadersHeightSizeMode != DataGridViewColumnHeadersHeightSizeMode.AutoSize && defaultColumnHeadersHeight != this.ColumnHeadersHeight;
2017         }
2018
2019         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeadersHeightSizeMode"]/*‘ />
2020         /// <devdoc>
2021         ///    <para>
2022         ///       Gets or sets a value that determines the behavior for adjusting the column headers height.
2023         ///    </para>
2024         /// </devdoc>
2025         [
2026             DefaultValue(DataGridViewColumnHeadersHeightSizeMode.EnableResizing),
2027             RefreshProperties(RefreshProperties.All),
2028             SRCategory(SR.CatBehavior),
2029             SRDescription(SR.DataGridView_ColumnHeadersHeightSizeModeDescr)
2030         ]
2031         public DataGridViewColumnHeadersHeightSizeMode ColumnHeadersHeightSizeMode
2032         {
2033             get
2034             {
2035                 return this.columnHeadersHeightSizeMode;
2036             }
2037             set
2038             {
2039                // Sequential enum.  Valid values are 0x0 to 0x2
2040                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewColumnHeadersHeightSizeMode.EnableResizing, (int)DataGridViewColumnHeadersHeightSizeMode.AutoSize))
2041                 {
2042                      throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewColumnHeadersHeightSizeMode));
2043                 }
2044                 if (this.columnHeadersHeightSizeMode != value)
2045                 {
2046                     /*if (value == DataGridViewColumnHeadersHeightSizeMode.AutoSize && !this.ColumnHeadersVisible)
2047                     {
2048                         We intentionally don‘t throw an error because of designer code spit order.
2049                     }*/
2050                     DataGridViewAutoSizeModeEventArgs dgvasme = new DataGridViewAutoSizeModeEventArgs(this.columnHeadersHeightSizeMode == DataGridViewColumnHeadersHeightSizeMode.AutoSize);
2051                     this.columnHeadersHeightSizeMode = value;
2052                     OnColumnHeadersHeightSizeModeChanged(dgvasme);
2053                 }
2054             }
2055         }
2056
2057         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeadersHeightSizeModeChanged"]/*‘ />
2058         [
2059             SRCategory(SR.CatPropertyChanged),
2060             SRDescription(SR.DataGridView_ColumnHeadersHeightSizeModeChangedDescr)
2061         ]
2062         public event DataGridViewAutoSizeModeEventHandler ColumnHeadersHeightSizeModeChanged
2063         {
2064             add
2065             {
2066                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERSHEIGHTSIZEMODECHANGED, value);
2067             }
2068             remove
2069             {
2070                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERSHEIGHTSIZEMODECHANGED, value);
2071             }
2072         }
2073
2074         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeadersVisible"]/*‘ />
2075         /// <devdoc>
2076         ///    <para>
2077         ///       Gets
2078         ///       or sets a value indicating if the dataGridView‘s column headers are visible.
2079         ///    </para>
2080         /// </devdoc>
2081         [
2082             SRCategory(SR.CatAppearance),
2083             DefaultValue(true),
2084             SRDescription(SR.DataGridViewColumnHeadersVisibleDescr)
2085         ]
2086         public bool ColumnHeadersVisible
2087         {
2088             get
2089             {
2090                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_columnHeadersVisible];
2091             }
2092             set
2093             {
2094                 if (this.ColumnHeadersVisible != value)
2095                 {
2096                     if (!value)
2097                     {
2098                         // Make sure that there is no visible column that only counts on the column headers to autosize
2099                         DataGridViewColumn dataGridViewColumn = this.Columns.GetFirstColumn(DataGridViewElementStates.Visible);
2100                         while (dataGridViewColumn != null)
2101                         {
2102                             if (dataGridViewColumn.InheritedAutoSizeMode == DataGridViewAutoSizeColumnMode.ColumnHeader)
2103                             {
2104                                 throw new InvalidOperationException(SR.GetString(SR.DataGridView_ColumnHeadersCannotBeInvisible));
2105                             }
2106                             dataGridViewColumn = this.Columns.GetNextColumn(dataGridViewColumn,
2107                                 DataGridViewElementStates.Visible,
2108                                 DataGridViewElementStates.None);
2109                         }
2110                     }
2111                     using (LayoutTransaction.CreateTransactionIf(this.AutoSize, this.ParentInternal, this, PropertyNames.ColumnHeadersVisible))
2112                     {
2113                         this.dataGridViewState1[DATAGRIDVIEWSTATE1_columnHeadersVisible] = value;
2114                         this.layout.ColumnHeadersVisible = value;
2115                         this.displayedBandsInfo.EnsureDirtyState();
2116                         if (!this.AutoSize)
2117                         {
2118                             PerformLayoutPrivate(false /*useRowShortcut*/, false /*computeVisibleRows*/, true /*invalidInAdjustFillingColumns*/, true /*repositionEditingControl*/);
2119                         }
2120                         InvalidateInside();
2121                         OnColumnHeadersGlobalAutoSize();
2122                     }
2123                 }
2124             }
2125         }
2126
2127         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.Columns"]/*‘ />
2128         [
2129             Editor("System.Windows.Forms.Design.DataGridViewColumnCollectionEditor, " + AssemblyRef.SystemDesign, typeof(System.Drawing.Design.UITypeEditor)),
2130             DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
2131             MergableProperty(false)
2132         ]
2133         public DataGridViewColumnCollection Columns
2134         {
2135             get
2136             {
2137                 if (this.dataGridViewColumns == null)
2138                 {
2139                     this.dataGridViewColumns = CreateColumnsInstance();
2140                 }
2141                 return this.dataGridViewColumns;
2142             }
2143         }
2144
2145         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CurrentCell"]/*‘ />
2146         [
2147             Browsable(false),
2148             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
2149         ]
2150         public DataGridViewCell CurrentCell
2151         {
2152             get
2153             {
2154                 if (this.ptCurrentCell.X == -1 && this.ptCurrentCell.Y == -1)
2155                 {
2156                     return null;
2157                 }
2158                 Debug.Assert(this.ptCurrentCell.X >= 0 && ptCurrentCell.Y >= 0);
2159                 Debug.Assert(this.ptCurrentCell.X < this.Columns.Count);
2160                 Debug.Assert(this.ptCurrentCell.Y < this.Rows.Count);
2161                 DataGridViewRow dataGridViewRow = (DataGridViewRow) this.Rows[this.ptCurrentCell.Y]; // unsharing row
2162                 return dataGridViewRow.Cells[this.ptCurrentCell.X];
2163             }
2164             set
2165             {
2166                 if ((value != null && (value.RowIndex != this.ptCurrentCell.Y || value.ColumnIndex != this.ptCurrentCell.X)) ||
2167                     (value == null && this.ptCurrentCell.X != -1))
2168                 {
2169                     if (value == null)
2170                     {
2171                         ClearSelection();
2172                         if (!SetCurrentCellAddressCore(-1, -1, true /*setAnchorCellAddress*/, true /*validateCurrentCell*/, false /*throughMouseClick*/))
2173                         {
2174                             // Edited value couldn‘t be committed or aborted
2175                             throw new InvalidOperationException(SR.GetString(SR.DataGridView_CellChangeCannotBeCommittedOrAborted));
2176                         }
2177                     }
2178                     else
2179                     {
2180                         if (value.DataGridView != this)
2181                         {
2182                             throw new ArgumentException(SR.GetString(SR.DataGridView_CellDoesNotBelongToDataGridView));
2183                         }
2184                         if (!this.Columns[value.ColumnIndex].Visible ||
2185                             (this.Rows.GetRowState(value.RowIndex) & DataGridViewElementStates.Visible) == 0)
2186                         {
2187                             throw new InvalidOperationException(SR.GetString(SR.DataGridView_CurrentCellCannotBeInvisible));
2188                         }
2189                         if (!ScrollIntoView(value.ColumnIndex, value.RowIndex, true))
2190                         {
2191                             throw new InvalidOperationException(SR.GetString(SR.DataGridView_CellChangeCannotBeCommittedOrAborted));
2192                         }
2193                         if (IsInnerCellOutOfBounds(value.ColumnIndex, value.RowIndex))
2194                         {
2195                             return;
2196                         }
2197                         ClearSelection(value.ColumnIndex, value.RowIndex, true /*selectExceptionElement*/);
2198                         if (!SetCurrentCellAddressCore(value.ColumnIndex, value.RowIndex, true, false, false))
2199                         {
2200                             throw new InvalidOperationException(SR.GetString(SR.DataGridView_CellChangeCannotBeCommittedOrAborted));
2201                         }
2202                     }
2203                 }
2204             }
2205         }
2206
2207         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CurrentCellAddress"]/*‘ />
2208         [
2209             Browsable(false)
2210         ]
2211         public Point CurrentCellAddress
2212         {
2213             get
2214             {
2215                 return this.ptCurrentCell;
2216             }
2217         }
2218
2219         private DataGridViewCell CurrentCellInternal
2220         {
2221             get
2222             {
2223                 Debug.Assert(this.ptCurrentCell.X >= 0 && this.ptCurrentCell.X < this.Columns.Count);
2224                 Debug.Assert(this.ptCurrentCell.Y >= 0 && this.ptCurrentCell.Y < this.Rows.Count);
2225                 DataGridViewRow dataGridViewRow = this.Rows.SharedRow(this.ptCurrentCell.Y);
2226                 Debug.Assert(dataGridViewRow != null);
2227                 DataGridViewCell dataGridViewCell = dataGridViewRow.Cells[this.ptCurrentCell.X];
2228                 Debug.Assert(this.IsSharedCellVisible(dataGridViewCell, this.ptCurrentCell.Y));
2229                 return dataGridViewCell;
2230             }
2231         }
2232
2233         private bool CurrentCellIsFirstVisibleCell
2234         {
2235             get
2236             {
2237                 if (this.ptCurrentCell.X == -1)
2238                 {
2239                     return false;
2240                 }
2241                 Debug.Assert(this.ptCurrentCell.Y != -1);
2242
2243                 bool previousVisibleColumnExists = (null != this.Columns.GetPreviousColumn(this.Columns[this.ptCurrentCell.X], DataGridViewElementStates.Visible, DataGridViewElementStates.None));
2244                 bool previousVisibleRowExists = (-1 != this.Rows.GetPreviousRow(this.ptCurrentCell.Y, DataGridViewElementStates.Visible));
2245
2246                 return !previousVisibleColumnExists && !previousVisibleRowExists;
2247             }
2248         }
2249
2250         private bool CurrentCellIsLastVisibleCell
2251         {
2252             get
2253             {
2254                 if (this.ptCurrentCell.X == -1)
2255                 {
2256                     return false;
2257                 }
2258
2259                 Debug.Assert(this.ptCurrentCell.Y != -1);
2260
2261                 bool nextVisibleColumnExists = (null != this.Columns.GetNextColumn(this.Columns[this.ptCurrentCell.X], DataGridViewElementStates.Visible, DataGridViewElementStates.None));
2262                 bool nextVisibleRowExists = (-1 != this.Rows.GetNextRow(this.ptCurrentCell.Y, DataGridViewElementStates.Visible));
2263
2264                 return !nextVisibleColumnExists && !nextVisibleRowExists;
2265             }
2266         }
2267
2268         private bool CurrentCellIsEditedAndOnlySelectedCell
2269         {
2270             get
2271             {
2272                 if (this.ptCurrentCell.X == -1)
2273                 {
2274                     return false;
2275                 }
2276
2277                 Debug.Assert(this.ptCurrentCell.Y != -1);
2278
2279                 return this.editingControl != null &&
2280                        GetCellCount(DataGridViewElementStates.Selected) == 1 &&
2281                        this.CurrentCellInternal.Selected;
2282             }
2283         }
2284
2285         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CurrentRow"]/*‘ />
2286         [
2287             Browsable(false)
2288         ]
2289         public DataGridViewRow CurrentRow
2290         {
2291             get
2292             {
2293                 if (this.ptCurrentCell.X == -1)
2294                 {
2295                     return null;
2296                 }
2297
2298                 Debug.Assert(this.ptCurrentCell.Y >= 0);
2299                 Debug.Assert(this.ptCurrentCell.Y < this.Rows.Count);
2300
2301                 return this.Rows[this.ptCurrentCell.Y];
2302             }
2303         }
2304
2305         internal Cursor CursorInternal
2306         {
2307             set
2308             {
2309                 this.dataGridViewState2[DATAGRIDVIEWSTATE2_ignoreCursorChange] = true;
2310                 try
2311                 {
2312                     this.Cursor = value;
2313                 }
2314                 finally
2315                 {
2316                     this.dataGridViewState2[DATAGRIDVIEWSTATE2_ignoreCursorChange] = false;
2317                 }
2318             }
2319         }
2320
2321         internal DataGridViewDataConnection DataConnection
2322         {
2323             get
2324             {
2325                 return this.dataConnection;
2326             }
2327         }
2328
2329         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DataMember"]/*‘ />
2330         [
2331          DefaultValue(""),
2332          SRCategory(SR.CatData),
2333          Editor("System.Windows.Forms.Design.DataMemberListEditor, " + AssemblyRef.SystemDesign, typeof(System.Drawing.Design.UITypeEditor)),
2334          SRDescription(SR.DataGridViewDataMemberDescr)
2335         ]
2336         public string DataMember
2337         {
2338             get
2339             {
2340                 if (this.dataConnection == null)
2341                 {
2342                     return String.Empty;
2343                 }
2344                 else
2345                 {
2346                     return this.dataConnection.DataMember;
2347                 }
2348             }
2349             set
2350             {
2351                 if (value != this.DataMember)
2352                 {
2353                     this.CurrentCell = null;
2354                     if (this.dataConnection == null)
2355                     {
2356                         this.dataConnection = new DataGridViewDataConnection(this);
2357                     }
2358                     this.dataConnection.SetDataConnection(this.DataSource, value);
2359                     OnDataMemberChanged(EventArgs.Empty);
2360                 }
2361             }
2362         }
2363
2364         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DataMemberChanged"]/*‘ />
2365         [
2366             SRCategory(SR.CatPropertyChanged),
2367             SRDescription(SR.DataGridViewDataMemberChangedDescr)
2368         ]
2369         public event EventHandler DataMemberChanged
2370         {
2371             add
2372             {
2373                 this.Events.AddHandler(EVENT_DATAGRIDVIEWDATAMEMBERCHANGED, value);
2374             }
2375             remove
2376             {
2377                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWDATAMEMBERCHANGED, value);
2378             }
2379         }
2380
2381         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DataSource"]/*‘ />
2382         [
2383          DefaultValue(null),
2384          SRCategory(SR.CatData),
2385          RefreshProperties(RefreshProperties.Repaint),
2386          AttributeProvider(typeof(IListSource)),
2387          SRDescription(SR.DataGridViewDataSourceDescr)
2388         ]
2389         public object DataSource
2390         {
2391             get
2392             {
2393                 if (this.dataConnection == null)
2394                 {
2395                     return null;
2396                 }
2397                 else
2398                 {
2399                     return this.dataConnection.DataSource;
2400                 }
2401             }
2402             set
2403             {
2404                 if (value != this.DataSource)
2405                 {
2406                     this.CurrentCell = null;
2407                     if (this.dataConnection == null)
2408                     {
2409                         this.dataConnection = new DataGridViewDataConnection(this);
2410                         this.dataConnection.SetDataConnection(value, this.DataMember);
2411                     }
2412                     else
2413                     {
2414                         if (this.dataConnection.ShouldChangeDataMember(value))
2415                         {
2416                             // we fire DataMemberChanged event
2417                             this.DataMember = "";
2418                         }
2419                         this.dataConnection.SetDataConnection(value, this.DataMember);
2420                         if (value == null)
2421                         {
2422                             this.dataConnection = null;
2423                         }
2424                     }
2425                     OnDataSourceChanged(EventArgs.Empty);
2426                 }
2427             }
2428         }
2429
2430         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DataSourceChanged"]/*‘ />
2431         [
2432             SRCategory(SR.CatPropertyChanged),
2433             SRDescription(SR.DataGridViewDataSourceChangedDescr)
2434         ]
2435         public event EventHandler DataSourceChanged
2436         {
2437             add
2438             {
2439                 this.Events.AddHandler(EVENT_DATAGRIDVIEWDATASOURCECHANGED, value);
2440             }
2441             remove
2442             {
2443                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWDATASOURCECHANGED, value);
2444             }
2445         }
2446
2447         private static SolidBrush DefaultBackBrush
2448         {
2449             get
2450             {
2451                 return (SolidBrush) SystemBrushes.Window;
2452             }
2453         }
2454
2455         private static SolidBrush DefaultBackgroundBrush
2456         {
2457             get
2458             {
2459                 return (SolidBrush) SystemBrushes.AppWorkspace;
2460             }
2461         }
2462
2463         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DefaultCellStyle"]/*‘ />
2464         [
2465             SRCategory(SR.CatAppearance),
2466             SRDescription(SR.DataGridView_DefaultCellStyleDescr),
2467             AmbientValue(null)
2468         ]
2469         public DataGridViewCellStyle DefaultCellStyle
2470         {
2471             get
2472             {
2473                 if (this.defaultCellStyle == null)
2474                 {
2475                     this.defaultCellStyle = this.DefaultDefaultCellStyle;
2476                     return this.defaultCellStyle;
2477                 }
2478                 else if (this.defaultCellStyle.BackColor == Color.Empty ||
2479                     this.defaultCellStyle.ForeColor == Color.Empty ||
2480                     this.defaultCellStyle.SelectionBackColor == Color.Empty ||
2481                     this.defaultCellStyle.SelectionForeColor == Color.Empty ||
2482                     this.defaultCellStyle.Font == null ||
2483                     this.defaultCellStyle.Alignment == DataGridViewContentAlignment.NotSet ||
2484                     this.defaultCellStyle.WrapMode == DataGridViewTriState.NotSet)
2485                 {
2486                     DataGridViewCellStyle defaultCellStyleTmp = new DataGridViewCellStyle(this.defaultCellStyle);
2487                     defaultCellStyleTmp.Scope = DataGridViewCellStyleScopes.None;
2488                     if (this.defaultCellStyle.BackColor == Color.Empty)
2489                     {
2490                         defaultCellStyleTmp.BackColor = DefaultBackBrush.Color;
2491                     }
2492                     if (this.defaultCellStyle.ForeColor == Color.Empty)
2493                     {
2494                         defaultCellStyleTmp.ForeColor = base.ForeColor;
2495                         this.dataGridViewState1[DATAGRIDVIEWSTATE1_ambientForeColor] = true;
2496                     }
2497                     if (this.defaultCellStyle.SelectionBackColor == Color.Empty)
2498                     {
2499                         defaultCellStyleTmp.SelectionBackColor = DefaultSelectionBackBrush.Color;
2500                     }
2501                     if (this.defaultCellStyle.SelectionForeColor == Color.Empty)
2502                     {
2503                         defaultCellStyleTmp.SelectionForeColor = DefaultSelectionForeBrush.Color;
2504                     }
2505                     if (this.defaultCellStyle.Font == null)
2506                     {
2507                         defaultCellStyleTmp.Font = base.Font;
2508                         this.dataGridViewState1[DATAGRIDVIEWSTATE1_ambientFont] = true;
2509                     }
2510                     if (this.defaultCellStyle.Alignment == DataGridViewContentAlignment.NotSet)
2511                     {
2512                         defaultCellStyleTmp.AlignmentInternal = DataGridViewContentAlignment.MiddleLeft;
2513                     }
2514                     if (this.defaultCellStyle.WrapMode == DataGridViewTriState.NotSet)
2515                     {
2516                         defaultCellStyleTmp.WrapModeInternal = DataGridViewTriState.False;
2517                     }
2518                     defaultCellStyleTmp.AddScope(this, DataGridViewCellStyleScopes.DataGridView);
2519                     return defaultCellStyleTmp;
2520                 }
2521                 else
2522                 {
2523                     return this.defaultCellStyle;
2524                 }
2525             }
2526             set
2527             {
2528                 DataGridViewCellStyle cs = this.DefaultCellStyle;
2529                 cs.RemoveScope(DataGridViewCellStyleScopes.DataGridView);
2530                 this.defaultCellStyle = value;
2531                 if (value != null)
2532                 {
2533                     this.defaultCellStyle.AddScope(this, DataGridViewCellStyleScopes.DataGridView);
2534                 }
2535                 DataGridViewCellStyleDifferences dgvcsc = cs.GetDifferencesFrom(this.DefaultCellStyle);
2536                 if (dgvcsc != DataGridViewCellStyleDifferences.None)
2537                 {
2538                     this.CellStyleChangedEventArgs.ChangeAffectsPreferredSize = (dgvcsc == DataGridViewCellStyleDifferences.AffectPreferredSize);
2539                     OnDefaultCellStyleChanged(this.CellStyleChangedEventArgs);
2540                 }
2541             }
2542         }
2543
2544         private DataGridViewCellStyle DefaultDefaultCellStyle
2545         {
2546             get
2547             {
2548                 DataGridViewCellStyle defaultCellStyle = new DataGridViewCellStyle();
2549                 defaultCellStyle.BackColor = DefaultBackBrush.Color;
2550                 defaultCellStyle.ForeColor = base.ForeColor;
2551                 defaultCellStyle.SelectionBackColor = DefaultSelectionBackBrush.Color;
2552                 defaultCellStyle.SelectionForeColor = DefaultSelectionForeBrush.Color;
2553                 defaultCellStyle.Font = base.Font;
2554                 defaultCellStyle.AlignmentInternal = DataGridViewContentAlignment.MiddleLeft;
2555                 defaultCellStyle.WrapModeInternal = DataGridViewTriState.False;
2556                 defaultCellStyle.AddScope(this, DataGridViewCellStyleScopes.DataGridView);
2557
2558                 this.dataGridViewState1[DATAGRIDVIEWSTATE1_ambientFont] = true;
2559                 this.dataGridViewState1[DATAGRIDVIEWSTATE1_ambientForeColor] = true;
2560
2561                 return defaultCellStyle;
2562             }
2563         }
2564
2565         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DefaultCellStyleChanged"]/*‘ />
2566         [
2567             SRCategory(SR.CatPropertyChanged),
2568             SRDescription(SR.DataGridViewDefaultCellStyleChangedDescr)
2569         ]
2570         public event EventHandler DefaultCellStyleChanged
2571         {
2572             add
2573             {
2574                 this.Events.AddHandler(EVENT_DATAGRIDVIEWDEFAULTCELLSTYLECHANGED, value);
2575             }
2576             remove
2577             {
2578                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWDEFAULTCELLSTYLECHANGED, value);
2579             }
2580         }
2581
2582         private static SolidBrush DefaultForeBrush
2583         {
2584             get
2585             {
2586                 return (SolidBrush) SystemBrushes.WindowText;
2587             }
2588         }
2589
2590         private static Color DefaultGridColor
2591         {
2592             get
2593             {
2594                 return SystemColors.ControlDark;
2595             }
2596         }
2597
2598         private static SolidBrush DefaultHeadersBackBrush
2599         {
2600             get
2601             {
2602                 return (SolidBrush) SystemBrushes.Control;
2603             }
2604         }
2605
2606         private DataGridViewCellStyle DefaultRowHeadersDefaultCellStyle
2607         {
2608             get
2609             {
2610                 DataGridViewCellStyle defaultStyle = new DataGridViewCellStyle();
2611                 defaultStyle.BackColor = DefaultHeadersBackBrush.Color;
2612                 defaultStyle.ForeColor = DefaultForeBrush.Color;
2613                 defaultStyle.SelectionBackColor = DefaultSelectionBackBrush.Color;
2614                 defaultStyle.SelectionForeColor = DefaultSelectionForeBrush.Color;
2615                 defaultStyle.Font = base.Font;
2616                 defaultStyle.AlignmentInternal = DataGridViewContentAlignment.MiddleLeft;
2617                 defaultStyle.WrapModeInternal = DataGridViewTriState.True;
2618                 defaultStyle.AddScope(this, DataGridViewCellStyleScopes.RowHeaders);
2619
2620                 this.dataGridViewState1[DATAGRIDVIEWSTATE1_ambientRowHeadersFont] = true;
2621
2622                 return defaultStyle;
2623             }
2624         }
2625
2626         private static SolidBrush DefaultSelectionBackBrush
2627         {
2628             get
2629             {
2630                 return (SolidBrush) SystemBrushes.Highlight;
2631             }
2632         }
2633
2634         private static SolidBrush DefaultSelectionForeBrush
2635         {
2636             get
2637             {
2638                 return (SolidBrush) SystemBrushes.HighlightText;
2639             }
2640         }
2641
2642         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DefaultSize"]/*‘ />
2643         protected override Size DefaultSize
2644         {
2645             get
2646             {
2647                 return new Size(240, 150);
2648             }
2649         }
2650
2651         internal DisplayedBandsData DisplayedBandsInfo
2652         {
2653             get
2654             {
2655                 return this.displayedBandsInfo;
2656             }
2657         }
2658
2659         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DisplayRectangle"]/*‘ />
2660         /// <devdoc>
2661         ///     Returns the client rect of the display area of the control.
2662         ///     The DataGridView control return its client rectangle minus the potential scrollbars.
2663         /// </devdoc>
2664         public override Rectangle DisplayRectangle {
2665             get {
2666                 Rectangle rectDisplay = this.ClientRectangle;
2667                 if (this.horizScrollBar != null && this.horizScrollBar.Visible)
2668                 {
2669                     rectDisplay.Height -= this.horizScrollBar.Height;
2670                 }
2671                 if (this.vertScrollBar != null && this.vertScrollBar.Visible)
2672                 {
2673                     rectDisplay.Width -= this.vertScrollBar.Width;
2674                     if (this.RightToLeftInternal)
2675                     {
2676                         rectDisplay.X = this.vertScrollBar.Width;
2677                     }
2678                 }
2679                 return rectDisplay;
2680             }
2681         }
2682
2683         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.EditMode"]/*‘ />
2684         [
2685             SRCategory(SR.CatBehavior),
2686             DefaultValue(DataGridViewEditMode.EditOnKeystrokeOrF2),
2687             SRDescription(SR.DataGridView_EditModeDescr)
2688         ]
2689         public DataGridViewEditMode EditMode
2690         {
2691             get
2692             {
2693                 return this.editMode;
2694             }
2695             set
2696             {
2697                 // Sequential enum.  Valid values are 0x0 to 0x4
2698                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewEditMode.EditOnEnter, (int)DataGridViewEditMode.EditProgrammatically))
2699                 {
2700                      throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewEditMode));
2701                 }
2702                 if (this.editMode != value)
2703                 {
2704                     this.editMode = value;
2705                     OnEditModeChanged(EventArgs.Empty);
2706                 }
2707             }
2708         }
2709
2710         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.EditModeChanged"]/*‘ />
2711         [
2712             SRCategory(SR.CatPropertyChanged),
2713             SRDescription(SR.DataGridView_EditModeChangedDescr)
2714         ]
2715         public event EventHandler EditModeChanged
2716         {
2717             add
2718             {
2719                 this.Events.AddHandler(EVENT_DATAGRIDVIEWEDITMODECHANGED, value);
2720             }
2721             remove
2722             {
2723                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWEDITMODECHANGED, value);
2724             }
2725         }
2726
2727         internal Point MouseEnteredCellAddress
2728         {
2729             get
2730             {
2731                 return this.ptMouseEnteredCell;
2732             }
2733         }
2734
2735         private bool MouseOverEditingControl
2736         {
2737             get
2738             {
2739                 if (this.editingControl != null)
2740                 {
2741                     Point ptMouse = PointToClient(Control.MousePosition);
2742                     return this.editingControl.Bounds.Contains(ptMouse);
2743                 }
2744                 return false;
2745             }
2746         }
2747
2748         private bool MouseOverEditingPanel
2749         {
2750             get
2751             {
2752                 if (this.editingPanel != null)
2753                 {
2754                     Point ptMouse = PointToClient(Control.MousePosition);
2755                     return this.editingPanel.Bounds.Contains(ptMouse);
2756                 }
2757                 return false;
2758             }
2759         }
2760
2761         private bool MouseOverScrollBar
2762         {
2763             get
2764             {
2765                 Point ptMouse = PointToClient(Control.MousePosition);
2766                 if (this.vertScrollBar != null && this.vertScrollBar.Visible)
2767                 {
2768                     if (this.vertScrollBar.Bounds.Contains(ptMouse))
2769                     {
2770                         return true;
2771                     }
2772                 }
2773                 if (this.horizScrollBar != null && this.horizScrollBar.Visible)
2774                 {
2775                     return this.horizScrollBar.Bounds.Contains(ptMouse);
2776                 }
2777                 return false;
2778             }
2779         }
2780
2781         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.EditingControl"]/*‘ />
2782         [
2783             Browsable(false),
2784             EditorBrowsable(EditorBrowsableState.Advanced)
2785         ]
2786         public Control EditingControl
2787         {
2788             get
2789             {
2790                 return this.editingControl;
2791             }
2792         }
2793
2794         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.EditingPanel"]/*‘ />
2795         [
2796             Browsable(false),
2797             EditorBrowsable(EditorBrowsableState.Advanced)
2798         ]
2799         public Panel EditingPanel
2800         {
2801             get
2802             {
2803                 if (this.editingPanel == null)
2804                 {
2805                     this.editingPanel = new Panel();
2806                     this.editingPanel.AccessibleName = SR.GetString(SR.DataGridView_AccEditingPanelAccName);
2807                 }
2808                 return this.editingPanel;
2809             }
2810         }
2811
2812         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.EnableHeadersVisualStyles"]/*‘ />
2813         /// <devdoc>
2814         ///    <para>
2815         ///     Determines whether the DataGridView‘s header cells render using XP theming visual styles or not
2816         ///     when visual styles are enabled in the application.
2817         ///    </para>
2818         /// </devdoc>
2819         [
2820             SRCategory(SR.CatAppearance),
2821             DefaultValue(true),
2822             SRDescription(SR.DataGridView_EnableHeadersVisualStylesDescr)
2823         ]
2824         public bool EnableHeadersVisualStyles
2825         {
2826             get
2827             {
2828                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_enableHeadersVisualStyles];
2829             }
2830             set
2831             {
2832                 if (this.dataGridViewState2[DATAGRIDVIEWSTATE2_enableHeadersVisualStyles] != value)
2833                 {
2834                     this.dataGridViewState2[DATAGRIDVIEWSTATE2_enableHeadersVisualStyles] = value;
2835                     //OnEnableHeadersVisualStylesChanged(EventArgs.Empty);
2836                     // Some autosizing may have to be applied since the margins are potentially changed.
2837                     OnGlobalAutoSize(); // Put this into OnEnableHeadersVisualStylesChanged if created.
2838                 }
2839             }
2840         }
2841
2842         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.FirstDisplayedCell"]/*‘ />
2843         [
2844             Browsable(false),
2845             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
2846         ]
2847         public DataGridViewCell FirstDisplayedCell
2848         {
2849             get
2850             {
2851                 Point firstDisplayedCellAddress = this.FirstDisplayedCellAddress;
2852                 if (firstDisplayedCellAddress.X >= 0)
2853                 {
2854                     return this.Rows[firstDisplayedCellAddress.Y].Cells[firstDisplayedCellAddress.X]; // unshares the row of first displayed cell
2855                 }
2856                 return null;
2857             }
2858             set
2859             {
2860                 if (value != null)
2861                 {
2862                     DataGridViewCell firstDisplayedCell = value;
2863                     if (firstDisplayedCell.DataGridView != this)
2864                     {
2865                         throw new ArgumentException(SR.GetString(SR.DataGridView_CellDoesNotBelongToDataGridView));
2866                     }
2867                     if (firstDisplayedCell.RowIndex == -1 || firstDisplayedCell.ColumnIndex == -1)
2868                     {
2869                         throw new InvalidOperationException(SR.GetString(SR.DataGridView_FirstDisplayedCellCannotBeAHeaderOrSharedCell));
2870                     }
2871
2872                     Debug.Assert(firstDisplayedCell.RowIndex >= 0 &&
2873                         firstDisplayedCell.RowIndex < this.Rows.Count &&
2874                         firstDisplayedCell.ColumnIndex >= 0 &&
2875                         firstDisplayedCell.ColumnIndex < this.Columns.Count);
2876
2877                     if (!firstDisplayedCell.Visible)
2878                     {
2879                         throw new InvalidOperationException(SR.GetString(SR.DataGridView_FirstDisplayedCellCannotBeInvisible));
2880                     }
2881
2882                     if (!firstDisplayedCell.Frozen)
2883                     {
2884                         if (!this.Rows[firstDisplayedCell.RowIndex].Frozen)
2885                         {
2886                             this.FirstDisplayedScrollingRowIndex = firstDisplayedCell.RowIndex;
2887                         }
2888
2889                         if (!this.Columns[firstDisplayedCell.ColumnIndex].Frozen)
2890                         {
2891                             this.FirstDisplayedScrollingColumnIndex = firstDisplayedCell.ColumnIndex;
2892                         }
2893                     }
2894                 }
2895             }
2896         }
2897
2898         private Point FirstDisplayedCellAddress
2899         {
2900             get
2901             {
2902                 Point ptFirstDisplayedCellAddress = new Point(-1, -1);
2903                 ptFirstDisplayedCellAddress.Y = this.Rows.GetFirstRow(DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
2904                 if (ptFirstDisplayedCellAddress.Y == -1)
2905                 {
2906                     Debug.Assert(this.displayedBandsInfo.NumTotallyDisplayedFrozenRows == 0);
2907                     if (this.displayedBandsInfo.FirstDisplayedScrollingRow >= 0)
2908                     {
2909                         ptFirstDisplayedCellAddress.Y = this.displayedBandsInfo.FirstDisplayedScrollingRow;
2910                     }
2911 #if DEBUG
2912                     else
2913                     {
2914                         Debug.Assert(this.displayedBandsInfo.FirstDisplayedScrollingRow == -1);
2915                         Debug.Assert(this.displayedBandsInfo.NumDisplayedScrollingRows == 0);
2916                         Debug.Assert(this.displayedBandsInfo.NumTotallyDisplayedScrollingRows == 0);
2917                     }
2918 #endif
2919                 }
2920                 if (ptFirstDisplayedCellAddress.Y >= 0)
2921                 {
2922                     ptFirstDisplayedCellAddress.X = this.FirstDisplayedColumnIndex;
2923                 }
2924                 return ptFirstDisplayedCellAddress;
2925             }
2926         }
2927
2928         internal int FirstDisplayedColumnIndex
2929         {
2930             get
2931             {
2932                 if (!this.IsHandleCreated)
2933                 {
2934                     return -1;
2935                 }
2936
2937                 int firstDisplayedColumnIndex = -1;
2938                 DataGridViewColumn dataGridViewColumn = this.Columns.GetFirstColumn(DataGridViewElementStates.Visible);
2939                 if (dataGridViewColumn != null)
2940                 {
2941                     if (dataGridViewColumn.Frozen)
2942                     {
2943                         firstDisplayedColumnIndex = dataGridViewColumn.Index;
2944                     }
2945                     else if (this.displayedBandsInfo.FirstDisplayedScrollingCol >= 0)
2946                     {
2947                         firstDisplayedColumnIndex = this.displayedBandsInfo.FirstDisplayedScrollingCol;
2948                     }
2949                 }
2950 #if DEBUG
2951                 DataGridViewColumn dataGridViewColumnDbg1 = this.Columns.GetFirstColumn(DataGridViewElementStates.Displayed);
2952                 int firstDisplayedColumnIndexDbg1 = (dataGridViewColumnDbg1 == null) ? -1 : dataGridViewColumnDbg1.Index;
2953
2954                 int firstDisplayedColumnIndexDbg2 = -1;
2955                 DataGridViewColumn dataGridViewColumnDbg = this.Columns.GetFirstColumn(DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
2956                 if (dataGridViewColumnDbg != null)
2957                 {
2958                     firstDisplayedColumnIndexDbg2 = dataGridViewColumnDbg.Index;
2959                 }
2960                 else if (this.displayedBandsInfo.FirstDisplayedScrollingCol >= 0)
2961                 {
2962                     firstDisplayedColumnIndexDbg2 = this.displayedBandsInfo.FirstDisplayedScrollingCol;
2963                 }
2964                 else
2965                 {
2966                     Debug.Assert(this.displayedBandsInfo.LastTotallyDisplayedScrollingCol == -1);
2967                 }
2968                 Debug.Assert(firstDisplayedColumnIndex == firstDisplayedColumnIndexDbg1 || !this.Visible || this.displayedBandsInfo.Dirty);
2969                 Debug.Assert(firstDisplayedColumnIndex == firstDisplayedColumnIndexDbg2 || this.displayedBandsInfo.Dirty);
2970 #endif
2971                 return firstDisplayedColumnIndex;
2972             }
2973         }
2974
2975         internal int FirstDisplayedRowIndex
2976         {
2977             get
2978             {
2979                 if (!this.IsHandleCreated)
2980                 {
2981                     return -1;
2982                 }
2983
2984                 int firstDisplayedRowIndex = this.Rows.GetFirstRow(DataGridViewElementStates.Visible);
2985                 if (firstDisplayedRowIndex != -1)
2986                 {
2987                     if ((this.Rows.GetRowState(firstDisplayedRowIndex) & DataGridViewElementStates.Frozen) == 0 &&
2988                         this.displayedBandsInfo.FirstDisplayedScrollingRow >= 0)
2989                     {
2990                         firstDisplayedRowIndex = this.displayedBandsInfo.FirstDisplayedScrollingRow;
2991                     }
2992                 }
2993 #if FALSE //DEBUG
2994                 int firstDisplayedRowIndexDbg1 = this.Rows.GetFirstRow(DataGridViewElementStates.Displayed);
2995
2996                 int firstDisplayedRowIndexDbg2 = this.Rows.GetFirstRow(DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
2997                 if (firstDisplayedRowIndexDbg2 == -1)
2998                 {
2999                     if (this.displayedBandsInfo.FirstDisplayedScrollingRow >= 0)
3000                     {
3001                         firstDisplayedRowIndexDbg2 = this.displayedBandsInfo.FirstDisplayedScrollingRow;
3002                     }
3003                 }
3004
3005                 Debug.Assert(firstDisplayedRowIndex == firstDisplayedRowIndexDbg1 || !this.Visible || this.displayedBandsInfo.Dirty, "firstDisplayedRowIndex =" + firstDisplayedRowIndex.ToString() + ", firstDisplayedRowIndexDbg1=" + firstDisplayedRowIndexDbg1.ToString());
3006                 Debug.Assert(firstDisplayedRowIndex == firstDisplayedRowIndexDbg2 || this.displayedBandsInfo.Dirty, "firstDisplayedRowIndex =" + firstDisplayedRowIndex.ToString() + ", firstDisplayedRowIndexDbg2=" + firstDisplayedRowIndexDbg2.ToString());
3007 #endif
3008                 return firstDisplayedRowIndex;
3009             }
3010         }
3011
3012         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.FirstDisplayedScrollingColumnHiddenWidth"]/*‘ />
3013         [
3014             Browsable(false),
3015             EditorBrowsable(EditorBrowsableState.Advanced),
3016             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
3017         ]
3018         public int FirstDisplayedScrollingColumnHiddenWidth
3019         {
3020             get
3021             {
3022                 return this.negOffset;
3023             }
3024         }
3025
3026         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.FirstDisplayedScrollingColumnIndex"]/*‘ />
3027         [
3028             Browsable(false),
3029             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
3030         ]
3031         public int FirstDisplayedScrollingColumnIndex
3032         {
3033             get
3034             {
3035                 return this.displayedBandsInfo.FirstDisplayedScrollingCol;
3036             }
3037             set
3038             {
3039                 if (value < 0 || value >= this.Columns.Count)
3040                 {
3041                     throw new ArgumentOutOfRangeException("value");
3042                 }
3043                 if (!this.Columns[value].Visible)
3044                 {
3045                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_FirstDisplayedScrollingColumnCannotBeInvisible));
3046                 }
3047                 if (this.Columns[value].Frozen)
3048                 {
3049                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_FirstDisplayedScrollingColumnCannotBeFrozen));
3050                 }
3051
3052                 if (!this.IsHandleCreated)
3053                 {
3054                     CreateHandle();
3055                 }
3056
3057                 int displayWidth = this.layout.Data.Width;
3058                 if (displayWidth <= 0)
3059                 {
3060                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_NoRoomForDisplayedColumns));
3061                 }
3062
3063                 int totalVisibleFrozenWidth = this.Columns.GetColumnsWidth(DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
3064                 if (totalVisibleFrozenWidth >= displayWidth)
3065                 {
3066                     Debug.Assert(totalVisibleFrozenWidth > 0);
3067                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_FrozenColumnsPreventFirstDisplayedScrollingColumn));
3068                 }
3069
3070                 if (value == this.displayedBandsInfo.FirstDisplayedScrollingCol)
3071                 {
3072                     return;
3073                 }
3074
3075                 if (this.ptCurrentCell.X >= 0 &&
3076                     !CommitEdit(DataGridViewDataErrorContexts.Parsing | DataGridViewDataErrorContexts.Commit | DataGridViewDataErrorContexts.Scroll,
3077                                 false /*forCurrentCellChange*/, false /*forCurrentRowChange*/))
3078                 {
3079                     // Could not commit edited cell value - return silently
3080                     // [....]: should we throw an error here?
3081                     return;
3082                 }
3083                 if (IsColumnOutOfBounds(value))
3084                 {
3085                     return;
3086                 }
3087                 bool success = ScrollColumnIntoView(value, -1, /*committed*/ true, false /*forCurrentCellChange*/);
3088                 Debug.Assert(success);
3089
3090                 Debug.Assert(this.displayedBandsInfo.FirstDisplayedScrollingCol >= 0);
3091                 Debug.Assert(this.displayedBandsInfo.FirstDisplayedScrollingCol == value ||
3092                              this.Columns.DisplayInOrder(this.displayedBandsInfo.FirstDisplayedScrollingCol, value));
3093                 int maxHorizontalOffset = this.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - displayWidth;
3094                 while (this.displayedBandsInfo.FirstDisplayedScrollingCol != value &&
3095                         this.HorizontalOffset < maxHorizontalOffset)
3096                 {
3097                     ScrollColumns(1);
3098                 }
3099             }
3100         }
3101
3102         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.FirstDisplayedScrollingRowIndex"]/*‘ />
3103         [
3104             Browsable(false),
3105             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
3106         ]
3107         public int FirstDisplayedScrollingRowIndex
3108         {
3109             get
3110             {
3111                 return this.displayedBandsInfo.FirstDisplayedScrollingRow;
3112             }
3113             set
3114             {
3115                 if (value < 0 || value >= this.Rows.Count)
3116                 {
3117                     throw new ArgumentOutOfRangeException("value");
3118                 }
3119                 if ((this.Rows.GetRowState(value) & DataGridViewElementStates.Visible) == 0)
3120                 {
3121                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_FirstDisplayedScrollingRowCannotBeInvisible));
3122                 }
3123                 if ((this.Rows.GetRowState(value) & DataGridViewElementStates.Frozen) != 0)
3124                 {
3125                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_FirstDisplayedScrollingRowCannotBeFrozen));
3126                 }
3127
3128                 if (!this.IsHandleCreated)
3129                 {
3130                     CreateHandle();
3131                 }
3132
3133                 int displayHeight = this.layout.Data.Height;
3134                 if (displayHeight <= 0)
3135                 {
3136                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_NoRoomForDisplayedRows));
3137                 }
3138
3139                 int totalVisibleFrozenHeight = this.Rows.GetRowsHeight(DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
3140                 if (totalVisibleFrozenHeight >= displayHeight)
3141                 {
3142                     Debug.Assert(totalVisibleFrozenHeight > 0);
3143                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_FrozenRowsPreventFirstDisplayedScrollingRow));
3144                 }
3145
3146                 if (value == this.displayedBandsInfo.FirstDisplayedScrollingRow)
3147                 {
3148                     return;
3149                 }
3150
3151                 if (this.ptCurrentCell.X >= 0 &&
3152                     !CommitEdit(DataGridViewDataErrorContexts.Parsing | DataGridViewDataErrorContexts.Commit | DataGridViewDataErrorContexts.Scroll,
3153                                 false /*forCurrentCellChange*/, false /*forCurrentRowChange*/))
3154                 {
3155                     // Could not commit edited cell value - return silently
3156                     // [....]: should we throw an error here?
3157                     return;
3158                 }
3159                 if (IsRowOutOfBounds(value))
3160                 {
3161                     return;
3162                 }
3163
3164                 Debug.Assert(this.displayedBandsInfo.FirstDisplayedScrollingRow >= 0);
3165
3166                 if (value > this.displayedBandsInfo.FirstDisplayedScrollingRow)
3167                 {
3168                     int rowsToScroll = this.Rows.GetRowCount(DataGridViewElementStates.Visible, this.displayedBandsInfo.FirstDisplayedScrollingRow, value);
3169                     Debug.Assert(rowsToScroll != 0);
3170                     ScrollRowsByCount(rowsToScroll, rowsToScroll > 1 ? ScrollEventType.LargeIncrement : ScrollEventType.SmallIncrement);
3171                 }
3172                 else
3173                 {
3174                     bool success = ScrollRowIntoView(-1, value, /*committed*/ true, false /*forCurrentCellChange*/);
3175                     Debug.Assert(success);
3176                 }
3177             }
3178         }
3179
3180         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ForeColor"]/*‘ />
3181         /// <internalonly/>
3182         [
3183             Browsable(false),
3184             EditorBrowsable(EditorBrowsableState.Advanced),
3185             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
3186         ]
3187         public override Color ForeColor
3188         {
3189             get
3190             {
3191                 return base.ForeColor;
3192             }
3193             set
3194             {
3195                 base.ForeColor = value;
3196             }
3197         }
3198
3199         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ForeColorChanged"]/*‘ />
3200         /// <internalonly/>
3201         [
3202             Browsable(false),
3203             EditorBrowsable(EditorBrowsableState.Advanced)
3204         ]
3205         new public event EventHandler ForeColorChanged
3206         {
3207             add
3208             {
3209                 base.ForeColorChanged += value;
3210             }
3211             remove
3212             {
3213                 base.ForeColorChanged -= value;
3214             }
3215         }
3216
3217         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.Font"]/*‘ />
3218         /// <internalonly/>
3219         [
3220             Browsable(false),
3221             EditorBrowsable(EditorBrowsableState.Advanced)
3222         ]
3223         public override Font Font
3224         {
3225             get
3226             {
3227                 return base.Font;
3228             }
3229             set
3230             {
3231                 base.Font = value;
3232             }
3233         }
3234
3235         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.FontChanged"]/*‘ />
3236         /// <internalonly/>
3237         [
3238             Browsable(false),
3239             EditorBrowsable(EditorBrowsableState.Advanced)
3240         ]
3241         new public event EventHandler FontChanged
3242         {
3243             add
3244             {
3245                 base.FontChanged += value;
3246             }
3247             remove
3248             {
3249                 base.FontChanged -= value;
3250             }
3251         }
3252
3253         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.GridColor"]/*‘ />
3254         /// <devdoc>
3255         ///    <para>Gets or sets the grid color of the dataGridView (when Single mode is used).</para>
3256         /// </devdoc>
3257         [
3258             SRCategory(SR.CatAppearance),
3259             SRDescription(SR.DataGridViewGridColorDescr)
3260         ]
3261         public Color GridColor
3262         {
3263             get
3264             {
3265                 return this.gridPen.Color;
3266             }
3267             set
3268             {
3269                 if (value.IsEmpty)
3270                 {
3271                     throw new ArgumentException(SR.GetString(SR.DataGridView_EmptyColor, "GridColor"));
3272                 }
3273                 if (value.A < 255)
3274                 {
3275                     throw new ArgumentException(SR.GetString(SR.DataGridView_TransparentColor, "GridColor"));
3276                 }
3277                 if (!value.Equals(this.gridPen.Color))
3278                 {
3279                     if (this.gridPen != null)
3280                     {
3281                         this.gridPen.Dispose();
3282                     }
3283
3284                     this.gridPen = new Pen(value);
3285                     OnGridColorChanged(EventArgs.Empty);
3286                 }
3287             }
3288         }
3289
3290         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.GridColorChanged"]/*‘ />
3291         [
3292             SRCategory(SR.CatPropertyChanged),
3293             SRDescription(SR.DataGridViewOnGridColorChangedDescr)
3294         ]
3295         public event EventHandler GridColorChanged
3296         {
3297             add
3298             {
3299                 this.Events.AddHandler(EVENT_DATAGRIDVIEWGRIDCOLORCHANGED, value);
3300             }
3301             remove
3302             {
3303                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWGRIDCOLORCHANGED, value);
3304             }
3305         }
3306
3307         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ShouldSerializeGridColor"]/*‘ />
3308         private bool ShouldSerializeGridColor()
3309         {
3310             return !this.GridPen.Color.Equals(DefaultGridColor);
3311         }
3312
3313         internal Pen GridPen
3314         {
3315             get
3316             {
3317                 return this.gridPen;
3318             }
3319         }
3320
3321         internal int HorizontalOffset
3322         {
3323             get
3324             {
3325                 return this.horizontalOffset;
3326             }
3327             set
3328             {
3329                 if (value < 0)
3330                 {
3331                     value = 0;
3332                 }
3333                 int widthNotVisible = this.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - this.layout.Data.Width;
3334                 if (value > widthNotVisible && widthNotVisible > 0)
3335                 {
3336                     value = widthNotVisible;
3337                 }
3338                 if (value == this.horizontalOffset)
3339                 {
3340                     return;
3341                 }
3342
3343                 ScrollEventType scrollEventType;
3344                 int oldFirstVisibleScrollingCol = this.displayedBandsInfo.FirstDisplayedScrollingCol;
3345                 int change = this.horizontalOffset - value;
3346                 if (this.horizScrollBar.Enabled)
3347                 {
3348                     this.horizScrollBar.Value = value;
3349                 }
3350                 this.horizontalOffset = value;
3351
3352                 int totalVisibleFrozenWidth = this.Columns.GetColumnsWidth(DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
3353
3354                 Rectangle rectTmp = this.layout.Data;
3355                 if (this.layout.ColumnHeadersVisible)
3356                 {
3357                     // column headers must scroll as well
3358                     rectTmp = Rectangle.Union(rectTmp, this.layout.ColumnHeaders);
3359                 }
3360                 else if (this.SingleVerticalBorderAdded)
3361                 {
3362                     if (!this.RightToLeftInternal)
3363                     {
3364                         rectTmp.X--;
3365                     }
3366                     rectTmp.Width++;
3367                 }
3368
3369                 if (this.SingleVerticalBorderAdded &&
3370                     totalVisibleFrozenWidth > 0)
3371                 {
3372                     if (!this.RightToLeftInternal)
3373                     {
3374                         rectTmp.X++;
3375                     }
3376                     rectTmp.Width--;
3377                 }
3378
3379                 if (!this.RightToLeftInternal)
3380                 {
3381                     rectTmp.X += totalVisibleFrozenWidth;
3382                 }
3383                 rectTmp.Width -= totalVisibleFrozenWidth;
3384
3385                 this.displayedBandsInfo.FirstDisplayedScrollingCol = ComputeFirstVisibleScrollingColumn();
3386                 // update the lastTotallyDisplayedScrollingCol
3387                 ComputeVisibleColumns();
3388
3389                 if (this.editingControl != null &&
3390                     !this.Columns[this.ptCurrentCell.X].Frozen &&
3391                     this.displayedBandsInfo.FirstDisplayedScrollingCol > -1)
3392                 {
3393                     PositionEditingControl(true /*setLocation*/, false /*setSize*/, false /*setFocus*/);
3394                 }
3395
3396                 // The mouse probably is not over the same cell after the scroll.
3397                 UpdateMouseEnteredCell(null /*HitTestInfo*/, null /*MouseEventArgs*/);
3398
3399                 if (oldFirstVisibleScrollingCol == this.displayedBandsInfo.FirstDisplayedScrollingCol)
3400                 {
3401                     scrollEventType = change > 0 ? ScrollEventType.SmallIncrement : ScrollEventType.SmallDecrement;
3402                 }
3403                 else if (this.Columns.DisplayInOrder(oldFirstVisibleScrollingCol, this.displayedBandsInfo.FirstDisplayedScrollingCol))
3404                 {
3405                     scrollEventType = this.Columns.GetColumnCount(DataGridViewElementStates.Visible, oldFirstVisibleScrollingCol, this.displayedBandsInfo.FirstDisplayedScrollingCol) > 1 ? ScrollEventType.LargeIncrement : ScrollEventType.SmallIncrement;
3406                 }
3407                 else
3408                 {
3409                     Debug.Assert(this.Columns.DisplayInOrder(this.displayedBandsInfo.FirstDisplayedScrollingCol, oldFirstVisibleScrollingCol));
3410                     scrollEventType = this.Columns.GetColumnCount(DataGridViewElementStates.Visible, this.displayedBandsInfo.FirstDisplayedScrollingCol, oldFirstVisibleScrollingCol) > 1 ? ScrollEventType.LargeDecrement : ScrollEventType.SmallDecrement;
3411                 }
3412
3413                 NativeMethods.RECT[] rects = CreateScrollableRegion(rectTmp);
3414                 if (this.RightToLeftInternal)
3415                 {
3416                     change = -change;
3417                 }
3418                 ScrollRectangles(rects, change);
3419                 if (!this.dataGridViewState2[DATAGRIDVIEWSTATE2_stopRaisingHorizontalScroll])
3420                 {
3421                     OnScroll(scrollEventType, this.horizontalOffset + change, this.horizontalOffset, ScrollOrientation.HorizontalScroll);
3422                 }
3423                 FlushDisplayedChanged();
3424             }
3425         }
3426
3427         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.HorizontalScrollBar"]/*‘ />
3428         protected ScrollBar HorizontalScrollBar
3429         {
3430             get
3431             {
3432                 return this.horizScrollBar;
3433             }
3434         }
3435
3436         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.HorizontalScrollingOffset"]/*‘ />
3437         [
3438             Browsable(false),
3439             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
3440         ]
3441         public int HorizontalScrollingOffset
3442         {
3443             get
3444             {
3445                 return this.horizontalOffset;
3446             }
3447             set
3448             {
3449                 // int widthNotVisible = this.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - this.layout.Data.Width;
3450                 if (value < 0)
3451                 {
3452                     throw new ArgumentOutOfRangeException("HorizontalScrollingOffset", SR.GetString(SR.InvalidLowBoundArgumentEx, "HorizontalScrollingOffset", (value).ToString(CultureInfo.CurrentCulture), (0).ToString(CultureInfo.CurrentCulture)));
3453                 }
3454                 // Intentionally ignoring the out of range situation.
3455                 // else if (value > widthNotVisible && widthNotVisible > 0)
3456                 //{
3457                 //    throw new ArgumentOutOfRangeException(SR.GetString(SR.DataGridView_PropertyTooLarge, "HorizontalScrollingOffset", (widthNotVisible).ToString()));
3458                 //}
3459                 else if (value > 0 && (this.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - this.layout.Data.Width) <= 0)
3460                 {
3461                     // Intentionally ignoring the case where dev tries to set value while there is no horizontal scrolling possible.
3462                     // throw new ArgumentOutOfRangeException("HorizontalScrollingOffset", SR.GetString(SR.DataGridView_PropertyMustBeZero));
3463                     Debug.Assert(this.horizontalOffset == 0);
3464                     return;
3465                 }
3466                 if (value == this.horizontalOffset)
3467                 {
3468                     return;
3469                 }
3470                 this.HorizontalOffset = value;
3471             }
3472         }
3473
3474         private System.Windows.Forms.Timer HorizScrollTimer
3475         {
3476             get
3477             {
3478                 if (this.horizScrollTimer == null)
3479                 {
3480                     this.horizScrollTimer = new System.Windows.Forms.Timer();
3481                     this.horizScrollTimer.Tick += new System.EventHandler(HorizScrollTimer_Tick);
3482                 }
3483                 return this.horizScrollTimer;
3484             }
3485         }
3486
3487         private bool InAdjustFillingColumns
3488         {
3489             get
3490             {
3491                 return this.dataGridViewOper[DATAGRIDVIEWOPER_inAdjustFillingColumn] || this.dataGridViewOper[DATAGRIDVIEWOPER_inAdjustFillingColumns];
3492             }
3493         }
3494
3495         internal bool InBeginEdit
3496         {
3497             get
3498             {
3499                 return this.dataGridViewOper[DATAGRIDVIEWOPER_inBeginEdit];
3500             }
3501         }
3502
3503         internal bool InDisplayIndexAdjustments
3504         {
3505             get
3506             {
3507                 return this.dataGridViewOper[DATAGRIDVIEWOPER_inDisplayIndexAdjustments];
3508             }
3509             set
3510             {
3511                 this.dataGridViewOper[DATAGRIDVIEWOPER_inDisplayIndexAdjustments] = value;
3512             }
3513         }
3514
3515         internal bool InEndEdit
3516         {
3517             get
3518             {
3519                 return this.dataGridViewOper[DATAGRIDVIEWOPER_inEndEdit];
3520             }
3521         }
3522
3523         private DataGridViewCellStyle InheritedEditingCellStyle
3524         {
3525             get
3526             {
3527                 if (this.ptCurrentCell.X == -1)
3528                 {
3529                     return null;
3530                 }
3531
3532                 return this.CurrentCellInternal.GetInheritedStyleInternal(this.ptCurrentCell.Y);
3533             }
3534         }
3535
3536         internal bool InInitialization
3537         {
3538             get
3539             {
3540                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_initializing];
3541             }
3542         }
3543
3544         internal bool InSortOperation
3545         {
3546             get
3547             {
3548                 return this.dataGridViewOper[DATAGRIDVIEWOPER_inSort];
3549             }
3550         }
3551
3552         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.IsCurrentCellDirty"]/*‘ />
3553         [Browsable(false)]
3554         public bool IsCurrentCellDirty
3555         {
3556             get
3557             {
3558                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_editedCellChanged];
3559             }
3560         }
3561
3562         private bool IsCurrentCellDirtyInternal
3563         {
3564             set
3565             {
3566                 if (value != this.dataGridViewState1[DATAGRIDVIEWSTATE1_editedCellChanged])
3567                 {
3568                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_editedCellChanged] = value;
3569                     OnCurrentCellDirtyStateChanged(EventArgs.Empty);
3570                 }
3571             }
3572         }
3573
3574         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.IsCurrentCellInEditMode"]/*‘ />
3575         [Browsable(false)]
3576         public bool IsCurrentCellInEditMode
3577         {
3578             get
3579             {
3580                 return this.editingControl != null || this.dataGridViewState1[DATAGRIDVIEWSTATE1_currentCellInEditMode];
3581             }
3582         }
3583
3584         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.IsCurrentRowDirty"]/*‘ />
3585         // Only used in bound scenarios, when binding to a IEditableObject
3586         [Browsable(false)]
3587         public bool IsCurrentRowDirty
3588         {
3589             get
3590             {
3591                 if (!this.VirtualMode)
3592                 {
3593                     return this.dataGridViewState1[DATAGRIDVIEWSTATE1_editedRowChanged] || this.IsCurrentCellDirty;
3594                 }
3595                 else
3596                 {
3597                     QuestionEventArgs qe = new QuestionEventArgs(this.dataGridViewState1[DATAGRIDVIEWSTATE1_editedRowChanged] || this.IsCurrentCellDirty);
3598                     OnRowDirtyStateNeeded(qe);
3599                     return qe.Response;
3600                 }
3601             }
3602         }
3603
3604         internal bool IsCurrentRowDirtyInternal
3605         {
3606             set
3607             {
3608                 if (value != this.dataGridViewState1[DATAGRIDVIEWSTATE1_editedRowChanged])
3609                 {
3610                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_editedRowChanged] = value;
3611                     if (this.RowHeadersVisible && this.ShowEditingIcon && this.ptCurrentCell.Y >= 0)
3612                     {
3613                         // Force the pencil to appear in the row header
3614                         InvalidateCellPrivate(-1, this.ptCurrentCell.Y);
3615                     }
3616                 }
3617             }
3618         }
3619
3620         private bool IsEscapeKeyEffective
3621         {
3622             get
3623             {
3624                 return this.dataGridViewOper[DATAGRIDVIEWOPER_trackColResize] ||
3625                        this.dataGridViewOper[DATAGRIDVIEWOPER_trackRowResize] ||
3626                        this.dataGridViewOper[DATAGRIDVIEWOPER_trackColHeadersResize] ||
3627                        this.dataGridViewOper[DATAGRIDVIEWOPER_trackRowHeadersResize] ||
3628                        this.dataGridViewOper[DATAGRIDVIEWOPER_trackColRelocation] ||
3629                        this.IsCurrentCellDirty ||
3630                        ((this.VirtualMode || this.DataSource != null) && this.IsCurrentRowDirty) ||
3631                        (this.EditMode != DataGridViewEditMode.EditOnEnter && this.editingControl != null ||
3632                        this.dataGridViewState1[DATAGRIDVIEWSTATE1_newRowEdited]);
3633             }
3634         }
3635
3636         private bool IsMinimized
3637         {
3638             get
3639             {
3640                 Form parentForm = this.TopLevelControlInternal as Form;
3641                 return parentForm != null && parentForm.WindowState == FormWindowState.Minimized;
3642             }
3643         }
3644
3645         internal bool IsRestricted
3646         {
3647             get
3648             {
3649                 if (!this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestrictedChecked])
3650                 {
3651                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestricted] = false;
3652                     try
3653                     {
3654                         IntSecurity.AllWindows.Demand();
3655                     }
3656                     catch (SecurityException)
3657                     {
3658                         this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestricted] = true;
3659                     }
3660                     catch
3661                     {
3662                         this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestricted] = true; // To be on the safe side
3663                         this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestrictedChecked] = true;
3664                         throw;
3665                     }
3666                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestrictedChecked] = true;
3667                 }
3668                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestricted];
3669             }
3670         }
3671
3672         private bool IsSharedCellReadOnly(DataGridViewCell dataGridViewCell, int rowIndex)
3673         {
3674             Debug.Assert(dataGridViewCell != null);
3675             Debug.Assert(rowIndex >= 0);
3676             DataGridViewElementStates rowState = this.Rows.GetRowState(rowIndex);
3677             return this.ReadOnly ||
3678                    (rowState & DataGridViewElementStates.ReadOnly) != 0 ||
3679                    (dataGridViewCell.OwningColumn != null && dataGridViewCell.OwningColumn.ReadOnly) ||
3680                    dataGridViewCell.StateIncludes(DataGridViewElementStates.ReadOnly);
3681         }
3682
3683         internal bool IsSharedCellSelected(DataGridViewCell dataGridViewCell, int rowIndex)
3684         {
3685             Debug.Assert(dataGridViewCell != null);
3686             Debug.Assert(rowIndex >= 0);
3687             DataGridViewElementStates rowState = this.Rows.GetRowState(rowIndex);
3688             return (rowState & DataGridViewElementStates.Selected) != 0 ||
3689                    (dataGridViewCell.OwningColumn != null && dataGridViewCell.OwningColumn.Selected) ||
3690                    dataGridViewCell.StateIncludes(DataGridViewElementStates.Selected);
3691         }
3692
3693         internal bool IsSharedCellVisible(DataGridViewCell dataGridViewCell, int rowIndex)
3694         {
3695             Debug.Assert(dataGridViewCell != null);
3696             Debug.Assert(rowIndex >= 0);
3697             DataGridViewElementStates rowState = this.Rows.GetRowState(rowIndex);
3698             return (rowState & DataGridViewElementStates.Visible) != 0 &&
3699                    (dataGridViewCell.OwningColumn != null && dataGridViewCell.OwningColumn.Visible);
3700         }
3701
3702         internal LayoutData LayoutInfo
3703         {
3704             get
3705             {
3706                 if (this.layout.dirty && this.IsHandleCreated)
3707                 {
3708                     PerformLayoutPrivate(false /*useRowShortcut*/, true /*computeVisibleRows*/, false /*invalidInAdjustFillingColumns*/, false /*repositionEditingControl*/);
3709                 }
3710                 return this.layout;
3711             }
3712         }
3713
3714         internal Point MouseDownCellAddress
3715         {
3716             get
3717             {
3718                 return this.ptMouseDownCell;
3719             }
3720         }
3721
3722         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.MultiSelect"]/*‘ />
3723         [
3724             SRCategory(SR.CatBehavior),
3725             DefaultValue(true),
3726             SRDescription(SR.DataGridView_MultiSelectDescr)
3727         ]
3728         public bool MultiSelect
3729         {
3730             get
3731             {
3732                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_multiSelect];
3733             }
3734             set
3735             {
3736                 if (this.MultiSelect != value)
3737                 {
3738                     ClearSelection();
3739                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_multiSelect] = value;
3740                     OnMultiSelectChanged(EventArgs.Empty);
3741                 }
3742             }
3743         }
3744
3745         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.MultiSelectChanged"]/*‘ />
3746         [
3747             SRCategory(SR.CatPropertyChanged),
3748             SRDescription(SR.DataGridViewOnMultiSelectChangedDescr)
3749         ]
3750         public event EventHandler MultiSelectChanged
3751         {
3752             add
3753             {
3754                 this.Events.AddHandler(EVENT_DATAGRIDVIEWMULTISELECTCHANGED, value);
3755             }
3756             remove
3757             {
3758                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWMULTISELECTCHANGED, value);
3759             }
3760         }
3761
3762         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.NewRowIndex"]/*‘ />
3763         [
3764             Browsable(false),
3765             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
3766         ]
3767         public int NewRowIndex
3768         {
3769             get
3770             {
3771                 return this.newRowIndex;
3772             }
3773         }
3774
3775         internal bool NoDimensionChangeAllowed
3776         {
3777             get
3778             {
3779                 return this.noDimensionChangeCount > 0;
3780             }
3781         }
3782
3783         private int NoSelectionChangeCount
3784         {
3785             get
3786             {
3787                 return this.noSelectionChangeCount;
3788             }
3789             set
3790             {
3791                 Debug.Assert(value >= 0);
3792                 this.noSelectionChangeCount = value;
3793                 if (value == 0)
3794                 {
3795                     FlushSelectionChanged();
3796                 }
3797             }
3798         }
3799
3800         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.Padding"]/*‘ />
3801         [
3802             Browsable(false),
3803             EditorBrowsable(EditorBrowsableState.Never),
3804             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
3805         ]
3806         public new Padding Padding
3807         {
3808             get
3809             {
3810                 return base.Padding;
3811             }
3812             set
3813             {
3814                 base.Padding = value;
3815             }
3816         }
3817
3818         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.PaddingChanged"]/*‘ />
3819         [
3820             Browsable(false),
3821             EditorBrowsable(EditorBrowsableState.Never),
3822             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
3823         ]
3824         public new event EventHandler PaddingChanged
3825         {
3826             add
3827             {
3828                 base.PaddingChanged += value;
3829             }
3830             remove
3831             {
3832                 base.PaddingChanged -= value;
3833             }
3834         }
3835
3836         internal DataGridViewCellStyle PlaceholderCellStyle
3837         {
3838             get
3839             {
3840                 if (this.placeholderCellStyle == null)
3841                 {
3842                     this.placeholderCellStyle = new DataGridViewCellStyle();
3843                 }
3844                 return this.placeholderCellStyle;
3845             }
3846         }
3847
3848         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ReadOnly"]/*‘ />
3849         [
3850             Browsable(true),
3851             DefaultValue(false),
3852             SRCategory(SR.CatBehavior),
3853             SRDescription(SR.DataGridView_ReadOnlyDescr)
3854         ]
3855         public bool ReadOnly
3856         {
3857             get
3858             {
3859                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_readOnly];
3860             }
3861             set
3862             {
3863                 if (value != this.dataGridViewState1[DATAGRIDVIEWSTATE1_readOnly])
3864                 {
3865                     if (value &&
3866                         this.ptCurrentCell.X != -1 &&
3867                         this.IsCurrentCellInEditMode)
3868                     {
3869                         // Current cell becomes read-only. Exit editing mode.
3870                         if (!EndEdit(DataGridViewDataErrorContexts.Parsing | DataGridViewDataErrorContexts.Commit,
3871                                      DataGridViewValidateCellInternal.Always /*validateCell*/,
3872                                      false /*fireCellLeave*/,
3873                                      false /*fireCellEnter*/,
3874                                      false /*fireRowLeave*/,
3875                                      false /*fireRowEnter*/,
3876                                      false /*fireLeave*/,
3877                                      true /*keepFocus*/,
3878                                      false /*resetCurrentCell*/,
3879                                      false /*resetAnchorCell*/))
3880                         {
3881                             throw new InvalidOperationException(SR.GetString(SR.DataGridView_CommitFailedCannotCompleteOperation));
3882                         }
3883                     }
3884
3885                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_readOnly] = value;
3886
3887                     if (value)
3888                     {
3889                         try
3890                         {
3891                             this.dataGridViewOper[DATAGRIDVIEWOPER_inReadOnlyChange] = true;
3892                             for (int columnIndex = 0; columnIndex < this.Columns.Count; columnIndex++)
3893                             {
3894                                 SetReadOnlyColumnCore(columnIndex, false);
3895                             }
3896                             int rowCount = this.Rows.Count;
3897                             for (int rowIndex = 0; rowIndex < rowCount; rowIndex++)
3898                             {
3899                                 SetReadOnlyRowCore(rowIndex, false);
3900                             }
3901                         }
3902                         finally
3903                         {
3904                             this.dataGridViewOper[DATAGRIDVIEWOPER_inReadOnlyChange] = false;
3905                         }
3906                     }
3907 #if DEBUG
3908                     else
3909                     {
3910                         Debug.Assert(this.individualReadOnlyCells.Count == 0);
3911                         for (int columnIndex = 0; columnIndex < this.Columns.Count; columnIndex++)
3912                         {
3913                             Debug.Assert(this.Columns[columnIndex].ReadOnly == false);
3914                         }
3915                         int rowCount = this.Rows.Count;
3916                         for (int rowIndex = 0; rowIndex < rowCount; rowIndex++)
3917                         {
3918                             Debug.Assert((this.Rows.GetRowState(rowIndex) & DataGridViewElementStates.ReadOnly) == 0);
3919                         }
3920                     }
3921 #endif
3922                     OnReadOnlyChanged(EventArgs.Empty);
3923                 }
3924             }
3925         }
3926
3927         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ReadOnlyChanged"]/*‘ />
3928         [
3929             SRCategory(SR.CatPropertyChanged),
3930             SRDescription(SR.DataGridViewOnReadOnlyChangedDescr)
3931         ]
3932         public event EventHandler ReadOnlyChanged
3933         {
3934             add
3935             {
3936                 this.Events.AddHandler(EVENT_DATAGRIDVIEWREADONLYCHANGED, value);
3937             }
3938             remove
3939             {
3940                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWREADONLYCHANGED, value);
3941             }
3942         }
3943
3944         private void ResetCurrentCell()
3945         {
3946             if (this.ptCurrentCell.X != -1 &&
3947                 !SetCurrentCellAddressCore(-1, -1, true /*setAnchorCellAddress*/, true /*validateCurrentCell*/, false /*throughMouseClick*/))
3948             {
3949                 // Edited value couldn‘t be committed or aborted
3950                 throw new InvalidOperationException(SR.GetString(SR.DataGridView_CellChangeCannotBeCommittedOrAborted));
3951             }
3952         }
3953
3954         internal bool ResizingOperationAboutToStart
3955         {
3956             get
3957             {
3958                 return this.dataGridViewOper[DATAGRIDVIEWOPER_resizingOperationAboutToStart];
3959             }
3960         }
3961
3962         internal bool RightToLeftInternal
3963         {
3964             get
3965             {
3966                 if (this.dataGridViewState2[DATAGRIDVIEWSTATE2_rightToLeftValid])
3967                 {
3968                     return this.dataGridViewState2[DATAGRIDVIEWSTATE2_rightToLeftMode];
3969                 }
3970                 this.dataGridViewState2[DATAGRIDVIEWSTATE2_rightToLeftMode] = (this.RightToLeft == RightToLeft.Yes);
3971                 this.dataGridViewState2[DATAGRIDVIEWSTATE2_rightToLeftValid] = true;
3972                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_rightToLeftMode];
3973             }
3974         }
3975
3976         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowCount"]/*‘ />
3977         [
3978             Browsable(false),
3979             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
3980             EditorBrowsable(EditorBrowsableState.Advanced),
3981             DefaultValue(0)
3982         ]
3983         public int RowCount
3984         {
3985             get
3986             {
3987                 return this.Rows.Count;
3988             }
3989             set
3990             {
3991                 if (this.AllowUserToAddRowsInternal)
3992                 {
3993                     if (value < 1)
3994                     {
3995                         throw new ArgumentOutOfRangeException("RowCount", SR.GetString(SR.InvalidLowBoundArgumentEx, "RowCount", value.ToString(CultureInfo.CurrentCulture), (1).ToString(CultureInfo.CurrentCulture)));
3996                     }
3997                 }
3998                 else
3999                 {
4000                     if (value < 0)
4001                     {
4002                         throw new ArgumentOutOfRangeException("RowCount", SR.GetString(SR.InvalidLowBoundArgumentEx, "RowCount", value.ToString(CultureInfo.CurrentCulture), (0).ToString(CultureInfo.CurrentCulture)));
4003                     }
4004                 }
4005                 if (this.DataSource != null)
4006                 {
4007                     throw new InvalidOperationException(SR.GetString(SR.DataGridView_CannotSetRowCountOnDataBoundDataGridView));
4008                 }
4009                 if (value != this.Rows.Count)
4010                 {
4011                     if (value == 0)
4012                     {
4013                         // Total removal of the rows.
4014                         this.Rows.Clear();
4015                     }
4016                     else if (value < this.Rows.Count)
4017                     {
4018                         // Some rows need to be removed, from the tail of the rows collection
4019                         while (value < this.Rows.Count)
4020                         {
4021                             int currentRowCount = this.Rows.Count;
4022                             this.Rows.RemoveAt(currentRowCount - (this.AllowUserToAddRowsInternal ? 2 :  1));
4023                             if (this.Rows.Count >= currentRowCount)
4024                             {
4025                                 // Row removal failed. We stop the loop.
4026                                 break;
4027                             }
4028                         }
4029                     }
4030                     else
4031                     {
4032                         // Some rows need to be appened.
4033                         if (this.Columns.Count == 0)
4034                         {
4035                             // There are no columns yet, we simply create a single DataGridViewTextBoxColumn.
4036                             DataGridViewTextBoxColumn dataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
4037                             this.Columns.Add(dataGridViewTextBoxColumn);
4038                         }
4039                         int rowsToAdd = value - this.Rows.Count;
4040                         if (rowsToAdd > 0)
4041                         {
4042                             this.Rows.Add(rowsToAdd);
4043                         }
4044                     }
4045                 }
4046             }
4047         }
4048
4049         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeadersBorderStyle"]/*‘ />
4050         [
4051             SRCategory(SR.CatAppearance),
4052             SRDescription(SR.DataGridView_RowHeadersBorderStyleDescr),
4053             Browsable(true),
4054             DefaultValue(DataGridViewHeaderBorderStyle.Raised)
4055         ]
4056         public DataGridViewHeaderBorderStyle RowHeadersBorderStyle
4057         {
4058             get
4059             {
4060                 switch (this.advancedRowHeadersBorderStyle.All)
4061                 {
4062                     case DataGridViewAdvancedCellBorderStyle.NotSet:
4063                         return DataGridViewHeaderBorderStyle.Custom;
4064
4065                     case DataGridViewAdvancedCellBorderStyle.None:
4066                         return DataGridViewHeaderBorderStyle.None;
4067
4068                     case DataGridViewAdvancedCellBorderStyle.Single:
4069                         return DataGridViewHeaderBorderStyle.Single;
4070
4071                     case DataGridViewAdvancedCellBorderStyle.InsetDouble:
4072                         return DataGridViewHeaderBorderStyle.Sunken;
4073
4074                     case DataGridViewAdvancedCellBorderStyle.OutsetPartial:
4075                         return DataGridViewHeaderBorderStyle.Raised;
4076
4077                     default:
4078                         return DataGridViewHeaderBorderStyle.Custom;
4079                 }
4080             }
4081             set
4082             {
4083                 // Sequential enum.  Valid values are 0x0 to 0x4
4084                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewHeaderBorderStyle.Custom, (int)DataGridViewHeaderBorderStyle.None))
4085                 {
4086                     throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewHeaderBorderStyle));
4087                 }
4088
4089                 if (value != this.RowHeadersBorderStyle)
4090                 {
4091                     if (value == DataGridViewHeaderBorderStyle.Custom)
4092                     {
4093                         throw new ArgumentException(SR.GetString(SR.DataGridView_CustomCellBorderStyleInvalid, "RowHeadersBorderStyle"));
4094                     }
4095                     this.dataGridViewOper[DATAGRIDVIEWOPER_inBorderStyleChange] = true;
4096                     try
4097                     {
4098                         switch (value)
4099                         {
4100                             case DataGridViewHeaderBorderStyle.Single:
4101                                 this.advancedRowHeadersBorderStyle.All = DataGridViewAdvancedCellBorderStyle.Single;
4102                                 break;
4103
4104                             case DataGridViewHeaderBorderStyle.Raised:
4105                                 this.advancedRowHeadersBorderStyle.All = DataGridViewAdvancedCellBorderStyle.OutsetPartial;
4106                                 break;
4107
4108                             case DataGridViewHeaderBorderStyle.Sunken:
4109                                 this.advancedRowHeadersBorderStyle.All = DataGridViewAdvancedCellBorderStyle.InsetDouble;
4110                                 break;
4111
4112                             case DataGridViewHeaderBorderStyle.None:
4113                                 this.advancedRowHeadersBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;
4114                                 break;
4115                         }
4116                     }
4117                     finally
4118                     {
4119                         this.dataGridViewOper[DATAGRIDVIEWOPER_inBorderStyleChange] = false;
4120                     }
4121                     OnRowHeadersBorderStyleChanged(EventArgs.Empty);
4122                 }
4123             }
4124         }
4125
4126         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeadersBorderStyleChanged"]/*‘ />
4127         [
4128             SRCategory(SR.CatPropertyChanged),
4129             SRDescription(SR.DataGridView_RowHeadersBorderStyleChangedDescr)
4130         ]
4131         public event EventHandler RowHeadersBorderStyleChanged
4132         {
4133             add
4134             {
4135                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEADERSBORDERSTYLECHANGED, value);
4136             }
4137             remove
4138             {
4139                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEADERSBORDERSTYLECHANGED, value);
4140             }
4141         }
4142
4143         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeadersDefaultCellStyle"]/*‘ />
4144         [
4145             SRCategory(SR.CatAppearance),
4146             SRDescription(SR.DataGridView_RowHeadersDefaultCellStyleDescr),
4147             AmbientValue(null)
4148         ]
4149         public DataGridViewCellStyle RowHeadersDefaultCellStyle
4150         {
4151             get
4152             {
4153                 if (this.rowHeadersDefaultCellStyle == null)
4154                 {
4155                     this.rowHeadersDefaultCellStyle = this.DefaultRowHeadersDefaultCellStyle;
4156                 }
4157                 return this.rowHeadersDefaultCellStyle;
4158             }
4159             set
4160             {
4161                 DataGridViewCellStyle cs = this.RowHeadersDefaultCellStyle;
4162                 cs.RemoveScope(DataGridViewCellStyleScopes.RowHeaders);
4163                 this.rowHeadersDefaultCellStyle = value;
4164                 if (value != null)
4165                 {
4166                     this.rowHeadersDefaultCellStyle.AddScope(this, DataGridViewCellStyleScopes.RowHeaders);
4167                 }
4168                 DataGridViewCellStyleDifferences dgvcsc = cs.GetDifferencesFrom(this.RowHeadersDefaultCellStyle);
4169                 if (dgvcsc != DataGridViewCellStyleDifferences.None)
4170                 {
4171                     this.CellStyleChangedEventArgs.ChangeAffectsPreferredSize = (dgvcsc == DataGridViewCellStyleDifferences.AffectPreferredSize);
4172                     OnRowHeadersDefaultCellStyleChanged(this.CellStyleChangedEventArgs);
4173                 }
4174             }
4175         }
4176
4177         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeadersDefaultCellStyleChanged"]/*‘ />
4178         [
4179             SRCategory(SR.CatPropertyChanged),
4180             SRDescription(SR.DataGridViewRowHeadersDefaultCellStyleChangedDescr)
4181         ]
4182         public event EventHandler RowHeadersDefaultCellStyleChanged
4183         {
4184             add
4185             {
4186                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEADERSDEFAULTCELLSTYLECHANGED, value);
4187             }
4188             remove
4189             {
4190                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEADERSDEFAULTCELLSTYLECHANGED, value);
4191             }
4192         }
4193
4194         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeadersVisible"]/*‘ />
4195         /// <devdoc>
4196         ///    <para>
4197         ///       Gets or sets a value indicating whether the dataGridView‘s row headers are
4198         ///       visible.
4199         ///    </para>
4200         /// </devdoc>
4201         [
4202             SRCategory(SR.CatAppearance),
4203             DefaultValue(true),
4204             SRDescription(SR.DataGridViewRowHeadersVisibleDescr)
4205         ]
4206         public bool RowHeadersVisible
4207         {
4208             get
4209             {
4210                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_rowHeadersVisible];
4211             }
4212             set
4213             {
4214                 if (this.RowHeadersVisible != value)
4215                 {
4216                     if (!value &&
4217                         (this.autoSizeRowsMode == DataGridViewAutoSizeRowsMode.AllHeaders || this.autoSizeRowsMode == DataGridViewAutoSizeRowsMode.DisplayedHeaders))
4218                     {
4219                         throw new InvalidOperationException(SR.GetString(SR.DataGridView_RowHeadersCannotBeInvisible));
4220                     }
4221                     using (LayoutTransaction.CreateTransactionIf(this.AutoSize, this.ParentInternal, this, PropertyNames.RowHeadersVisible))
4222                     {
4223                         this.dataGridViewState1[DATAGRIDVIEWSTATE1_rowHeadersVisible] = value;
4224                         this.layout.RowHeadersVisible = value;
4225                         this.displayedBandsInfo.EnsureDirtyState();
4226                         if (!this.AutoSize)
4227                         {
4228                             PerformLayoutPrivate(false /*useRowShortcut*/, false /*computeVisibleRows*/, true /*invalidInAdjustFillingColumns*/, true /*repositionEditingControl*/);
4229                         }
4230                         InvalidateInside();
4231                         OnRowHeadersGlobalAutoSize(value /*expandingRows*/);
4232                     }
4233                 }
4234             }
4235         }
4236
4237         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeadersWidth"]/*‘ />
4238         [
4239             SRCategory(SR.CatLayout),
4240             Localizable(true),
4241             SRDescription(SR.DataGridView_RowHeadersWidthDescr)
4242         ]
4243         public int RowHeadersWidth
4244         {
4245             get
4246             {
4247                 return this.rowHeadersWidth;
4248             }
4249             set
4250             {
4251                 if (value < minimumRowHeadersWidth)
4252                 {
4253                     throw new ArgumentOutOfRangeException("RowHeadersWidth", SR.GetString(SR.InvalidLowBoundArgumentEx, "RowHeadersWidth", (value).ToString(CultureInfo.CurrentCulture), (minimumRowHeadersWidth).ToString(CultureInfo.CurrentCulture)));
4254                 }
4255                 if (value > maxHeadersThickness)
4256                 {
4257                     throw new ArgumentOutOfRangeException("RowHeadersWidth", SR.GetString(SR.InvalidHighBoundArgumentEx, "RowHeadersWidth", (value).ToString(CultureInfo.CurrentCulture), (maxHeadersThickness).ToString(CultureInfo.CurrentCulture)));
4258                 }
4259                 if (this.RowHeadersWidthSizeMode != DataGridViewRowHeadersWidthSizeMode.EnableResizing &&
4260                     this.RowHeadersWidthSizeMode != DataGridViewRowHeadersWidthSizeMode.DisableResizing)
4261                 {
4262                     this.cachedRowHeadersWidth = value;
4263                 }
4264                 else if (this.rowHeadersWidth != value)
4265                 {
4266                     this.RowHeadersWidthInternal = value;
4267                 }
4268             }
4269         }
4270
4271         private int RowHeadersWidthInternal
4272         {
4273             set
4274             {
4275                 using (LayoutTransaction.CreateTransactionIf(this.AutoSize, this.ParentInternal, this, PropertyNames.RowHeadersWidth))
4276                 {
4277                     Debug.Assert(this.rowHeadersWidth != value);
4278                     Debug.Assert(value >= minimumRowHeadersWidth);
4279                     this.rowHeadersWidth = value;
4280                     if (this.AutoSize)
4281                     {
4282                         InvalidateInside();
4283                     }
4284                     else
4285                     {
4286                         if (this.layout.RowHeadersVisible)
4287                         {
4288                             PerformLayoutPrivate(false /*useRowShortcut*/, false /*computeVisibleRows*/, true /*invalidInAdjustFillingColumns*/, true /*repositionEditingControl*/);
4289                             InvalidateInside();
4290                         }
4291                     }
4292                     OnRowHeadersWidthChanged(EventArgs.Empty);
4293                 }
4294             }
4295         }
4296
4297         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeadersWidthChanged"]/*‘ />
4298         [
4299             SRCategory(SR.CatPropertyChanged),
4300             SRDescription(SR.DataGridViewRowHeadersWidthChangedDescr)
4301         ]
4302         public event EventHandler RowHeadersWidthChanged
4303         {
4304             add
4305             {
4306                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEADERSWIDTHCHANGED, value);
4307             }
4308             remove
4309             {
4310                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEADERSWIDTHCHANGED, value);
4311             }
4312         }
4313
4314         private bool ShouldSerializeRowHeadersWidth()
4315         {
4316             return (this.rowHeadersWidthSizeMode == DataGridViewRowHeadersWidthSizeMode.EnableResizing || this.rowHeadersWidthSizeMode == DataGridViewRowHeadersWidthSizeMode.DisableResizing) &&
4317                    defaultRowHeadersWidth != this.RowHeadersWidth;
4318         }
4319
4320         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeadersWidthSizeMode"]/*‘ />
4321         /// <devdoc>
4322         ///    <para>
4323         ///       Gets or sets a value that determines the behavior for adjusting the row headers width.
4324         ///    </para>
4325         /// </devdoc>
4326         [
4327             DefaultValue(DataGridViewRowHeadersWidthSizeMode.EnableResizing),
4328             RefreshProperties(RefreshProperties.All),
4329             SRCategory(SR.CatBehavior),
4330             SRDescription(SR.DataGridView_RowHeadersWidthSizeModeDescr)
4331         ]
4332         public DataGridViewRowHeadersWidthSizeMode RowHeadersWidthSizeMode
4333         {
4334             get
4335             {
4336                 return this.rowHeadersWidthSizeMode;
4337             }
4338             set
4339             {
4340                 // Sequential enum.  Valid values are 0x0 to 0x4
4341                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewRowHeadersWidthSizeMode.EnableResizing, (int)DataGridViewRowHeadersWidthSizeMode.AutoSizeToFirstHeader))
4342                 {
4343                     throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewRowHeadersWidthSizeMode));
4344                 }
4345                 if (this.rowHeadersWidthSizeMode != value)
4346                 {
4347                     /*if (value != DataGridViewRowHeadersWidthSizeMode.EnableResizing &&
4348                      *    value != DataGridViewRowHeadersWidthSizeMode.DisableResizing &&
4349                      *    !this.RowHeadersVisible)
4350                     {
4351                         We intentionally don‘t throw an error because of designer code spit order.
4352                     }*/
4353                     DataGridViewAutoSizeModeEventArgs dgvasme = new DataGridViewAutoSizeModeEventArgs(this.rowHeadersWidthSizeMode != DataGridViewRowHeadersWidthSizeMode.EnableResizing &&
4354                                                                                                       this.rowHeadersWidthSizeMode != DataGridViewRowHeadersWidthSizeMode.DisableResizing);
4355                     this.rowHeadersWidthSizeMode = value;
4356                     OnRowHeadersWidthSizeModeChanged(dgvasme);
4357                 }
4358             }
4359         }
4360
4361         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeadersWidthSizeModeChanged"]/*‘ />
4362         [
4363             SRCategory(SR.CatPropertyChanged),
4364             SRDescription(SR.DataGridView_RowHeadersWidthSizeModeChangedDescr)
4365         ]
4366         public event DataGridViewAutoSizeModeEventHandler RowHeadersWidthSizeModeChanged
4367         {
4368             add
4369             {
4370                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEADERSWIDTHSIZEMODECHANGED, value);
4371             }
4372             remove
4373             {
4374                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEADERSWIDTHSIZEMODECHANGED, value);
4375             }
4376         }
4377
4378         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.Rows"]/*‘ />
4379         [
4380             Browsable(false)
4381         ]
4382         public DataGridViewRowCollection Rows
4383         {
4384             get
4385             {
4386                 if (this.dataGridViewRows == null)
4387                 {
4388                     this.dataGridViewRows = CreateRowsInstance();
4389                 }
4390                 return this.dataGridViewRows;
4391             }
4392         }
4393
4394         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowsDefaultCellStyle"]/*‘ />
4395         [
4396             SRCategory(SR.CatAppearance),
4397             SRDescription(SR.DataGridView_RowsDefaultCellStyleDescr)
4398         ]
4399         public DataGridViewCellStyle RowsDefaultCellStyle
4400         {
4401             get
4402             {
4403                 if (this.rowsDefaultCellStyle == null)
4404                 {
4405                     this.rowsDefaultCellStyle = new DataGridViewCellStyle();
4406                     this.rowsDefaultCellStyle.AddScope(this, DataGridViewCellStyleScopes.Rows);
4407                 }
4408                 return this.rowsDefaultCellStyle;
4409             }
4410             set
4411             {
4412                 DataGridViewCellStyle cs = this.RowsDefaultCellStyle;
4413                 cs.RemoveScope(DataGridViewCellStyleScopes.Rows);
4414                 this.rowsDefaultCellStyle = value;
4415                 if (value != null)
4416                 {
4417                     this.rowsDefaultCellStyle.AddScope(this, DataGridViewCellStyleScopes.Rows);
4418                 }
4419                 DataGridViewCellStyleDifferences dgvcsc = cs.GetDifferencesFrom(this.RowsDefaultCellStyle);
4420                 if (dgvcsc != DataGridViewCellStyleDifferences.None)
4421                 {
4422                     this.CellStyleChangedEventArgs.ChangeAffectsPreferredSize = (dgvcsc == DataGridViewCellStyleDifferences.AffectPreferredSize);
4423                     OnRowsDefaultCellStyleChanged(this.CellStyleChangedEventArgs);
4424                 }
4425             }
4426         }
4427
4428         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowsDefaultCellStyleChanged"]/*‘ />
4429         [
4430             SRCategory(SR.CatPropertyChanged),
4431             SRDescription(SR.DataGridViewRowsDefaultCellStyleChangedDescr)
4432         ]
4433         public event EventHandler RowsDefaultCellStyleChanged
4434         {
4435             add
4436             {
4437                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWSDEFAULTCELLSTYLECHANGED, value);
4438             }
4439             remove
4440             {
4441                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWSDEFAULTCELLSTYLECHANGED, value);
4442             }
4443         }
4444
4445         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowTemplate"]/*‘ />
4446         [
4447             SRCategory(SR.CatAppearance),
4448             Browsable(true),
4449             SRDescription(SR.DataGridView_RowTemplateDescr),
4450             DesignerSerializationVisibility(DesignerSerializationVisibility.Content)
4451         ]
4452         public DataGridViewRow RowTemplate
4453         {
4454             get
4455             {
4456                 if (this.rowTemplate == null)
4457                 {
4458                     this.rowTemplate = new DataGridViewRow();
4459                 }
4460                 return this.rowTemplate;
4461             }
4462             set
4463             {
4464                 DataGridViewRow dataGridViewRow = value;
4465                 if (dataGridViewRow != null)
4466                 {
4467                     if (dataGridViewRow.DataGridView != null)
4468                     {
4469                         throw new InvalidOperationException(SR.GetString(SR.DataGridView_RowAlreadyBelongsToDataGridView));
4470                     }
4471                     //if (dataGridViewRow.Selected)
4472                     //{
4473                     //    throw new InvalidOperationException(SR.GetString(SR.DataGridView_RowTemplateCannotBeSelected));
4474                     //}
4475                 }
4476                 this.rowTemplate = dataGridViewRow;
4477             }
4478         }
4479
4480         private bool ShouldSerializeRowTemplate()
4481         {
4482             return this.rowTemplate != null;
4483         }
4484
4485         internal DataGridViewRow RowTemplateClone
4486         {
4487             get
4488             {
4489                 DataGridViewRow rowTemplateClone = (DataGridViewRow) this.RowTemplate.Clone();
4490                 CompleteCellsCollection(rowTemplateClone);
4491                 return rowTemplateClone;
4492             }
4493         }
4494
4495         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ScrollBars"]/*‘ />
4496         /// <devdoc>
4497         ///     Possible return values are given by the ScrollBars enumeration.
4498         /// </devdoc>
4499         [
4500             DefaultValue(ScrollBars.Both),
4501             Localizable(true),
4502             SRCategory(SR.CatLayout),
4503             SRDescription(SR.DataGridView_ScrollBarsDescr)
4504         ]
4505         public ScrollBars ScrollBars
4506         {
4507             get
4508             {
4509                 return this.scrollBars;
4510             }
4511             set
4512             {
4513                 // Sequential enum.  Valid values are 0x0 to 0x3
4514                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)ScrollBars.None, (int)ScrollBars.Both))
4515                 {
4516                      throw new InvalidEnumArgumentException("value", (int)value, typeof(ScrollBars));
4517                 }
4518
4519                 if (this.scrollBars != value)
4520                 {
4521                     using (LayoutTransaction.CreateTransactionIf(this.AutoSize, this.ParentInternal, this, PropertyNames.ScrollBars))
4522                     {
4523                         // Before changing the value of this.scrollBars, we scroll to the top-left cell to
4524                         // avoid inconsitent state of scrollbars.
4525                         DataGridViewColumn dataGridViewColumn = this.Columns.GetFirstColumn(DataGridViewElementStates.Visible);
4526                         int firstVisibleRowIndex = this.Rows.GetFirstRow(DataGridViewElementStates.Visible);
4527
4528                         if (dataGridViewColumn != null && firstVisibleRowIndex != -1)
4529                         {
4530                             if (!ScrollIntoView(dataGridViewColumn.Index, firstVisibleRowIndex, false))
4531                             {
4532                                 throw new InvalidOperationException(SR.GetString(SR.DataGridView_CellChangeCannotBeCommittedOrAborted));
4533                             }
4534                         }
4535                         Debug.Assert(this.HorizontalOffset == 0);
4536                         Debug.Assert(this.VerticalOffset == 0);
4537
4538                         this.scrollBars = value;
4539
4540                         if (!this.AutoSize)
4541                         {
4542                             PerformLayoutPrivate(false /*useRowShortcut*/, false /*computeVisibleRows*/, true /*invalidInAdjustFillingColumns*/, true /*repositionEditingControl*/);
4543                         }
4544                         Invalidate();
4545                     }
4546                 }
4547             }
4548         }
4549
4550         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.SelectedCells"]/*‘ />
4551         [
4552             Browsable(false)
4553         ]
4554         public DataGridViewSelectedCellCollection SelectedCells
4555         {
4556             [
4557                 SuppressMessage("Microsoft.Performance", "CA1817:DoNotCallPropertiesThatCloneValuesInLoops"), // not legitimate
4558                 SuppressMessage("Microsoft.Performance", "CA1808:AvoidCallsThatBoxValueTypes") // consider using generics instead of DataGridViewIntLinkedList
4559             ]
4560             get
4561             {
4562                 DataGridViewSelectedCellCollection stcc = new DataGridViewSelectedCellCollection();
4563                 switch (this.SelectionMode)
4564                 {
4565                     case DataGridViewSelectionMode.CellSelect:
4566                     {
4567                         // Note: If we change the design and decide that SelectAll() should use band selection,
4568                         // we need to add those to the selected cells.
4569                         stcc.AddCellLinkedList(this.individualSelectedCells);
4570                         break;
4571                     }
4572                     case DataGridViewSelectionMode.FullColumnSelect:
4573                     case DataGridViewSelectionMode.ColumnHeaderSelect:
4574                     {
4575                         foreach (int columnIndex in this.selectedBandIndexes)
4576                         {
4577                             foreach (DataGridViewRow dataGridViewRow in this.Rows)   // unshares all rows!
4578                             {
4579                                 stcc.Add(dataGridViewRow.Cells[columnIndex]);
4580                             }
4581                         }
4582                         if (this.SelectionMode == DataGridViewSelectionMode.ColumnHeaderSelect)
4583                         {
4584                             stcc.AddCellLinkedList(this.individualSelectedCells);
4585                         }
4586                         break;
4587                     }
4588                     case DataGridViewSelectionMode.FullRowSelect:
4589                     case DataGridViewSelectionMode.RowHeaderSelect:
4590                     {
4591                         foreach (int rowIndex in this.selectedBandIndexes)
4592                         {
4593                             DataGridViewRow dataGridViewRow = (DataGridViewRow) this.Rows[rowIndex]; // unshares the selected row
4594                             foreach (DataGridViewCell dataGridViewCell in dataGridViewRow.Cells)
4595                             {
4596                                 stcc.Add(dataGridViewCell);
4597                             }
4598                         }
4599                         if (this.SelectionMode == DataGridViewSelectionMode.RowHeaderSelect)
4600                         {
4601                             stcc.AddCellLinkedList(this.individualSelectedCells);
4602                         }
4603                         break;
4604                     }
4605                 }
4606                 return stcc;
4607             }
4608         }
4609
4610         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.SelectedColumns"]/*‘ />
4611         [
4612             Browsable(false)
4613         ]
4614         public DataGridViewSelectedColumnCollection SelectedColumns
4615         {
4616             [
4617                 SuppressMessage("Microsoft.Performance", "CA1808:AvoidCallsThatBoxValueTypes") // consider using generics instead of DataGridViewIntLinkedList
4618             ]
4619             get
4620             {
4621                 DataGridViewSelectedColumnCollection strc = new DataGridViewSelectedColumnCollection();
4622                 switch (this.SelectionMode)
4623                 {
4624                     case DataGridViewSelectionMode.CellSelect:
4625                     case DataGridViewSelectionMode.FullRowSelect:
4626                     case DataGridViewSelectionMode.RowHeaderSelect:
4627                         break;
4628                     case DataGridViewSelectionMode.FullColumnSelect:
4629                     case DataGridViewSelectionMode.ColumnHeaderSelect:
4630                         foreach (int columnIndex in this.selectedBandIndexes)
4631                         {
4632                             strc.Add(this.Columns[columnIndex]);
4633                         }
4634                         break;
4635                 }
4636                 return strc;
4637             }
4638         }
4639
4640         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.SelectedRows"]/*‘ />
4641         [
4642             Browsable(false),
4643         ]
4644         public DataGridViewSelectedRowCollection SelectedRows
4645         {
4646             [
4647                 SuppressMessage("Microsoft.Performance", "CA1808:AvoidCallsThatBoxValueTypes"), // using specialized DataGridViewIntLinkedList class instead of generics
4648                 SuppressMessage("Microsoft.Performance", "CA1817:DoNotCallPropertiesThatCloneValuesInLoops") // not legitimate
4649             ]
4650             get
4651             {
4652                 DataGridViewSelectedRowCollection strc = new DataGridViewSelectedRowCollection();
4653                 switch (this.SelectionMode)
4654                 {
4655                     case DataGridViewSelectionMode.CellSelect:
4656                     case DataGridViewSelectionMode.FullColumnSelect:
4657                     case DataGridViewSelectionMode.ColumnHeaderSelect:
4658                         break;
4659                     case DataGridViewSelectionMode.FullRowSelect:
4660                     case DataGridViewSelectionMode.RowHeaderSelect:
4661                         foreach (int rowIndex in this.selectedBandIndexes)
4662                         {
4663                             strc.Add((DataGridViewRow) this.Rows[rowIndex]); // unshares the selected row
4664                         }
4665                         break;
4666                 }
4667                 return strc;
4668             }
4669         }
4670
4671         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.SelectionMode"]/*‘ />
4672         [
4673             Browsable(true),
4674             SRCategory(SR.CatBehavior),
4675             DefaultValue(DataGridViewSelectionMode.RowHeaderSelect),
4676             SRDescription(SR.DataGridView_SelectionModeDescr)
4677         ]
4678         public DataGridViewSelectionMode SelectionMode
4679         {
4680             get
4681             {
4682                 return this.selectionMode;
4683             }
4684             set
4685             {
4686                 // Sequential enum.  Valid values are 0x0 to 0x4
4687                 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewSelectionMode.CellSelect, (int)DataGridViewSelectionMode.ColumnHeaderSelect))
4688                 {
4689                     throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewSelectionMode));
4690                 }
4691
4692                 if (this.SelectionMode != value)
4693                 {
4694                     if (!this.dataGridViewState2[DATAGRIDVIEWSTATE2_initializing] &&
4695                         (value == DataGridViewSelectionMode.FullColumnSelect || value == DataGridViewSelectionMode.ColumnHeaderSelect))
4696                     {
4697                         foreach (DataGridViewColumn dataGridViewColumn in this.Columns)
4698                         {
4699                             if (dataGridViewColumn.SortMode == DataGridViewColumnSortMode.Automatic)
4700                             {
4701                                 throw new InvalidOperationException(SR.GetString(SR.DataGridView_SelectionModeAndSortModeClash, (value).ToString()));
4702                             }
4703                         }
4704                     }
4705                     ClearSelection();
4706                     this.selectionMode = value;
4707                 }
4708             }
4709         }
4710
4711         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ShowCellErrors"]/*‘ />
4712         [
4713             DefaultValue(true),
4714             SRCategory(SR.CatAppearance),
4715             SRDescription(SR.DataGridView_ShowCellErrorsDescr)
4716         ]
4717         public bool ShowCellErrors
4718         {
4719             get
4720             {
4721                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_showCellErrors];
4722             }
4723             set
4724             {
4725                 if (this.ShowCellErrors != value)
4726                 {
4727                     this.dataGridViewState2[DATAGRIDVIEWSTATE2_showCellErrors] = value;
4728
4729                     // Put this into OnShowCellErrorsChanged if created.
4730                     if (this.IsHandleCreated && !this.DesignMode)
4731                     {
4732                         if (value && !this.ShowRowErrors && !this.ShowCellToolTips)
4733                         {
4734                             // the tool tip hasn‘t yet been activated
4735                             // activate it now
4736                             this.toolTipControl.Activate(!String.IsNullOrEmpty(this.toolTipCaption));
4737                         }
4738
4739                         if (!value && !this.ShowRowErrors && !this.ShowCellToolTips)
4740                         {
4741                             // there is no reason to keep the tool tip activated
4742                             // deactivate it
4743                             this.toolTipCaption = String.Empty;
4744                             this.toolTipControl.Activate(false /*activate*/);
4745                         }
4746
4747                         if (!value && (this.ShowRowErrors || this.ShowCellToolTips))
4748                         {
4749                             // reset the tool tip
4750                             this.toolTipControl.Activate(!String.IsNullOrEmpty(this.toolTipCaption));
4751                         }
4752
4753                         // Some autosizing may have to be applied since the potential presence of error icons influences the preferred sizes.
4754                         OnGlobalAutoSize();
4755                     }
4756
4757                     if (!this.layout.dirty && !this.DesignMode)
4758                     {
4759                         this.Invalidate(Rectangle.Union(this.layout.Data, this.layout.ColumnHeaders));
4760                         this.Invalidate(this.layout.TopLeftHeader);
4761                     }
4762                 }
4763             }
4764         }
4765
4766         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ShowCellToolTips"]/*‘ />
4767         [
4768             DefaultValue(true),
4769             SRCategory(SR.CatAppearance),
4770             SRDescription(SR.DataGridView_ShowCellToolTipsDescr)
4771         ]
4772         public bool ShowCellToolTips
4773         {
4774             get
4775             {
4776                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_showCellToolTips];
4777             }
4778             set
4779             {
4780                 if (this.ShowCellToolTips != value)
4781                 {
4782                     this.dataGridViewState2[DATAGRIDVIEWSTATE2_showCellToolTips] = value;
4783
4784                     if (this.IsHandleCreated && !this.DesignMode)
4785                     {
4786                         if (value && !this.ShowRowErrors && !this.ShowCellErrors)
4787                         {
4788                             // the tool tip hasn‘t yet been activated
4789                             // activate it now
4790                             this.toolTipControl.Activate(!String.IsNullOrEmpty(this.toolTipCaption) /*activate*/);
4791                         }
4792
4793                         if (!value && !this.ShowRowErrors && !this.ShowCellErrors)
4794                         {
4795                             // there is no reason to keep the tool tip activated
4796                             // deactivate it
4797                             this.toolTipCaption = String.Empty;
4798                             this.toolTipControl.Activate(false /*activate*/);
4799                         }
4800
4801                         if (!value && (this.ShowRowErrors || this.ShowCellErrors))
4802                         {
4803                             bool activate = !String.IsNullOrEmpty(this.toolTipCaption);
4804                             Point mouseCoord = System.Windows.Forms.Control.MousePosition;
4805                             activate &= this.ClientRectangle.Contains(PointToClient(mouseCoord));
4806
4807                             // reset the tool tip
4808                             this.toolTipControl.Activate(activate);
4809                         }
4810                     }
4811
4812                     if (!this.layout.dirty && !this.DesignMode)
4813                     {
4814                         Invalidate(this.layout.Data);
4815                     }
4816                 }
4817             }
4818         }
4819
4820         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ShowEditingIcon"]/*‘ />
4821         [
4822             DefaultValue(true),
4823             SRCategory(SR.CatAppearance),
4824             SRDescription(SR.DataGridView_ShowEditingIconDescr)
4825         ]
4826         public bool ShowEditingIcon
4827         {
4828             get
4829             {
4830                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_showEditingIcon];
4831             }
4832             set
4833             {
4834                 if (this.ShowEditingIcon != value)
4835                 {
4836                     this.dataGridViewState2[DATAGRIDVIEWSTATE2_showEditingIcon] = value;
4837
4838                     // invalidate the row header to pick up the new ShowEditingIcon value
4839                     if (this.RowHeadersVisible)
4840                     {
4841                         if (this.VirtualMode || this.DataSource != null)
4842                         {
4843                             if (this.IsCurrentRowDirty)
4844                             {
4845                                 Debug.Assert(this.ptCurrentCell.Y >= 0);
4846                                 InvalidateCellPrivate(-1, this.ptCurrentCell.Y);
4847                             }
4848                         }
4849                         else
4850                         {
4851                             if (this.IsCurrentCellDirty) {
4852                                 Debug.Assert(this.ptCurrentCell.Y >= 0);
4853                                 InvalidateCellPrivate(-1, this.ptCurrentCell.Y);
4854                             }
4855                         }
4856                     }
4857                 }
4858             }
4859         }
4860
4861         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ShowRowErrors"]/*‘ />
4862         [
4863             DefaultValue(true),
4864             SRCategory(SR.CatAppearance),
4865             SRDescription(SR.DataGridView_ShowRowErrorsDescr)
4866         ]
4867         public bool ShowRowErrors
4868         {
4869             get
4870             {
4871                 return this.dataGridViewState2[DATAGRIDVIEWSTATE2_showRowErrors];
4872             }
4873             set
4874             {
4875                 if (this.ShowRowErrors != value)
4876                 {
4877                     this.dataGridViewState2[DATAGRIDVIEWSTATE2_showRowErrors] = value;
4878
4879                     if (this.IsHandleCreated && !this.DesignMode)
4880                     {
4881                         if (value && !this.ShowCellErrors && !this.ShowCellToolTips)
4882                         {
4883                             // the tool tip hasn‘t yet been activated
4884                             // activate it now
4885                             this.toolTipControl.Activate(!String.IsNullOrEmpty(this.toolTipCaption));
4886                         }
4887
4888                         if (!value && !this.ShowCellErrors && !this.ShowCellToolTips)
4889                         {
4890                             // there is no reason to keep the tool tip activated
4891                             // deactivate it
4892                             this.toolTipCaption = String.Empty;
4893                             this.toolTipControl.Activate(false /*activate*/);
4894                         }
4895
4896                         if (!value && (this.ShowCellErrors || this.ShowCellToolTips))
4897                         {
4898                             // reset the tool tip
4899                             this.toolTipControl.Activate(!String.IsNullOrEmpty(this.toolTipCaption));
4900                         }
4901                     }
4902
4903                     if (!this.layout.dirty && !this.DesignMode)
4904                     {
4905                         Invalidate(this.layout.RowHeaders);
4906                     }
4907                 }
4908             }
4909         }
4910
4911         internal bool SingleHorizontalBorderAdded
4912         {
4913             get
4914             {
4915                 return !this.layout.ColumnHeadersVisible &&
4916                     (this.AdvancedCellBorderStyle.All == DataGridViewAdvancedCellBorderStyle.Single ||
4917                      this.CellBorderStyle == DataGridViewCellBorderStyle.SingleHorizontal);
4918             }
4919         }
4920
4921         internal bool SingleVerticalBorderAdded
4922         {
4923             get
4924             {
4925                 return !this.layout.RowHeadersVisible &&
4926                     (this.AdvancedCellBorderStyle.All == DataGridViewAdvancedCellBorderStyle.Single ||
4927                      this.CellBorderStyle == DataGridViewCellBorderStyle.SingleVertical);
4928             }
4929         }
4930
4931         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.SortedColumn"]/*‘ />
4932         [
4933             Browsable(false)
4934         ]
4935         public DataGridViewColumn SortedColumn
4936         {
4937             get
4938             {
4939                 return this.sortedColumn;
4940             }
4941         }
4942
4943         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.SortOrder"]/*‘ />
4944         [
4945             Browsable(false)
4946         ]
4947         public SortOrder SortOrder
4948         {
4949             get
4950             {
4951                 return this.sortOrder;
4952             }
4953         }
4954
4955         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.StandardTab"]/*‘ />
4956         /// <devdoc>
4957         ///    <para>
4958         ///    </para>
4959         /// </devdoc>
4960         [
4961             SRCategory(SR.CatBehavior),
4962             DefaultValue(false),
4963             EditorBrowsable(EditorBrowsableState.Advanced),
4964             SRDescription(SR.DataGridView_StandardTabDescr)
4965         ]
4966         public bool StandardTab
4967         {
4968             get
4969             {
4970                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_standardTab];
4971             }
4972             set
4973             {
4974                 if (this.dataGridViewState1[DATAGRIDVIEWSTATE1_standardTab] != value)
4975                 {
4976                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_standardTab] = value;
4977                     //OnStandardTabChanged(EventArgs.Empty);
4978                 }
4979             }
4980         }
4981
4982         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.Text"]/*‘ />
4983         [
4984             Browsable(false),
4985             EditorBrowsable(EditorBrowsableState.Never),
4986             Bindable(false)
4987         ]
4988         public override string Text
4989         {
4990             get
4991             {
4992                 return base.Text;
4993             }
4994             set
4995             {
4996                 base.Text = value;
4997             }
4998         }
4999
5000         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.TextChanged"]/*‘ />
5001         [
5002             Browsable(false),
5003             EditorBrowsable(EditorBrowsableState.Never)
5004         ]
5005         new public event EventHandler TextChanged
5006         {
5007             add
5008             {
5009                 base.TextChanged += value;
5010             }
5011             remove
5012             {
5013                 base.TextChanged -= value;
5014             }
5015         }
5016
5017         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.this"]/*‘ />
5018         [
5019             Browsable(false),
5020             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
5021             SuppressMessage("Microsoft.Design", "CA1023:IndexersShouldNotBeMultidimensional")
5022         ]
5023         public DataGridViewCell this[int columnIndex, int rowIndex]
5024         {
5025             get
5026             {
5027                 DataGridViewRow row = this.Rows[rowIndex];
5028                 return row.Cells[columnIndex];
5029             }
5030             set
5031             {
5032                 DataGridViewRow row = this.Rows[rowIndex];
5033                 row.Cells[columnIndex] = value;
5034             }
5035         }
5036
5037         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.this1"]/*‘ />
5038         [
5039             Browsable(false),
5040             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
5041             SuppressMessage("Microsoft.Design", "CA1023:IndexersShouldNotBeMultidimensional")
5042         ]
5043         public DataGridViewCell this[string columnName, int rowIndex]
5044         {
5045             get
5046             {
5047                 DataGridViewRow row = this.Rows[rowIndex];
5048                 return row.Cells[columnName];
5049             }
5050             set
5051             {
5052                 DataGridViewRow row = this.Rows[rowIndex];
5053                 row.Cells[columnName] = value;
5054             }
5055         }
5056
5057         private string ToolTipPrivate
5058         {
5059             get
5060             {
5061                 return this.toolTipCaption;
5062             }
5063         }
5064
5065         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.TopLeftHeaderCell"]/*‘ />
5066         [
5067             Browsable(false),
5068             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
5069         ]
5070         public DataGridViewHeaderCell TopLeftHeaderCell
5071         {
5072             get
5073             {
5074                 if (this.topLeftHeaderCell == null)
5075                 {
5076                     this.TopLeftHeaderCell = new DataGridViewTopLeftHeaderCell();
5077                 }
5078                 return this.topLeftHeaderCell;
5079             }
5080             set
5081             {
5082                 if (this.topLeftHeaderCell != value)
5083                 {
5084                     if (this.topLeftHeaderCell != null)
5085                     {
5086                         // Detach existing header cell
5087                         this.topLeftHeaderCell.DataGridViewInternal = null;
5088                     }
5089                     this.topLeftHeaderCell = value;
5090                     if (value != null)
5091                     {
5092                         this.topLeftHeaderCell.DataGridViewInternal = this;
5093                     }
5094                     if (this.ColumnHeadersVisible && this.RowHeadersVisible)
5095                     {
5096                         // If headers (rows or columns) are autosized, then this.RowHeadersWidth or this.ColumnHeadersHeight
5097                         // must be updated based on new cell preferred size
5098                         OnColumnHeadersGlobalAutoSize();
5099                         // In all cases, the top left cell needs to repaint
5100                         Invalidate(new Rectangle(this.layout.Inside.X, this.layout.Inside.Y, this.RowHeadersWidth, this.ColumnHeadersHeight));
5101                     }
5102                 }
5103             }
5104         }
5105
5106         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.UserSetCursor"]/*‘ />
5107         [
5108             Browsable(false),
5109             EditorBrowsable(EditorBrowsableState.Advanced)
5110         ]
5111         public Cursor UserSetCursor
5112         {
5113             get
5114             {
5115                 if (this.dataGridViewState1[DATAGRIDVIEWSTATE1_customCursorSet])
5116                 {
5117                     return this.oldCursor;
5118                 }
5119                 else
5120                 {
5121                     return this.Cursor;
5122                 }
5123             }
5124         }
5125
5126         internal int VerticalOffset
5127         {
5128             get
5129             {
5130                 return this.verticalOffset;
5131             }
5132             set
5133             {
5134                 if (value < 0)
5135                 {
5136                     value = 0;
5137                 }
5138                 int totalVisibleFrozenHeight = this.Rows.GetRowsHeight(DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
5139                 int fittingTrailingScrollingRowsHeight = ComputeHeightOfFittingTrailingScrollingRows(totalVisibleFrozenHeight);
5140                 if (value > this.vertScrollBar.Maximum - fittingTrailingScrollingRowsHeight)
5141                 {
5142                     value = this.vertScrollBar.Maximum - fittingTrailingScrollingRowsHeight;
5143                 }
5144                 if (value == this.verticalOffset)
5145                 {
5146                     return;
5147                 }
5148
5149                 int change = value - this.verticalOffset;
5150                 if (this.vertScrollBar.Enabled)
5151                 {
5152                     this.vertScrollBar.Value = value;
5153                 }
5154                 ScrollRowsByHeight(change); // calculate how many rows need to be scrolled based on ‘change‘
5155             }
5156         }
5157
5158         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.VerticalScrollBar"]/*‘ />
5159         protected ScrollBar VerticalScrollBar
5160         {
5161             get
5162             {
5163                 return this.vertScrollBar;
5164             }
5165         }
5166
5167         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.VerticalScrollingOffset"]/*‘ />
5168         [
5169             Browsable(false),
5170             DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
5171         ]
5172         public int VerticalScrollingOffset
5173         {
5174             get
5175             {
5176                 return this.verticalOffset;
5177             }
5178         }
5179
5180         private System.Windows.Forms.Timer VertScrollTimer
5181         {
5182             get
5183             {
5184                 if (this.vertScrollTimer == null)
5185                 {
5186                     this.vertScrollTimer = new System.Windows.Forms.Timer();
5187                     this.vertScrollTimer.Tick += new System.EventHandler(VertScrollTimer_Tick);
5188                 }
5189                 return this.vertScrollTimer;
5190             }
5191         }
5192
5193         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.VirtualMode"]/*‘ />
5194         /// <devdoc>
5195         ///    <para>
5196         ///    </para>
5197         /// </devdoc>
5198         [
5199             SRCategory(SR.CatBehavior),
5200             DefaultValue(false),
5201             EditorBrowsable(EditorBrowsableState.Advanced),
5202             SRDescription(SR.DataGridViewVirtualModeDescr)
5203         ]
5204         public bool VirtualMode
5205         {
5206             get
5207             {
5208                 return this.dataGridViewState1[DATAGRIDVIEWSTATE1_virtualMode];
5209             }
5210             set
5211             {
5212                 if (this.dataGridViewState1[DATAGRIDVIEWSTATE1_virtualMode] != value)
5213                 {
5214                     this.dataGridViewState1[DATAGRIDVIEWSTATE1_virtualMode] = value;
5215                     InvalidateRowHeights();
5216                     //OnVirtualModeChanged(EventArgs.Empty);
5217                 }
5218             }
5219         }
5220
5221         private bool VisibleCellExists
5222         {
5223             get
5224             {
5225                 if (null == this.Columns.GetFirstColumn(DataGridViewElementStates.Visible))
5226                 {
5227                     return false;
5228                 }
5229                 return -1 != this.Rows.GetFirstRow(DataGridViewElementStates.Visible);
5230             }
5231         }
5232
5233         // Events start here
5234
5235         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.AutoSizeColumnModeChanged"]/*‘ />
5236         [
5237             SRCategory(SR.CatPropertyChanged),
5238             SRDescription(SR.DataGridViewAutoSizeColumnModeChangedDescr)
5239         ]
5240         public event DataGridViewAutoSizeColumnModeEventHandler AutoSizeColumnModeChanged
5241         {
5242             add
5243             {
5244                 this.Events.AddHandler(EVENT_DATAGRIDVIEWAUTOSIZECOLUMNMODECHANGED, value);
5245             }
5246             remove
5247             {
5248                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWAUTOSIZECOLUMNMODECHANGED, value);
5249             }
5250         }
5251
5252         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CancelRowEdit"]/*‘ />
5253         [
5254             SRCategory(SR.CatAction),
5255             SRDescription(SR.DataGridView_CancelRowEditDescr)
5256         ]
5257         public event QuestionEventHandler CancelRowEdit
5258         {
5259             add
5260             {
5261                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCANCELROWEDIT, value);
5262             }
5263             remove
5264             {
5265                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCANCELROWEDIT, value);
5266             }
5267         }
5268
5269         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellBeginEdit"]/*‘ />
5270         [
5271             SRCategory(SR.CatData),
5272             SRDescription(SR.DataGridView_CellBeginEditDescr)
5273         ]
5274         public event DataGridViewCellCancelEventHandler CellBeginEdit
5275         {
5276             add
5277             {
5278                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLBEGINEDIT, value);
5279             }
5280             remove
5281             {
5282                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLBEGINEDIT, value);
5283             }
5284         }
5285
5286         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellClick"]/*‘ />
5287         [
5288             SRCategory(SR.CatMouse),
5289             SRDescription(SR.DataGridView_CellClickDescr)
5290         ]
5291         public event DataGridViewCellEventHandler CellClick
5292         {
5293             add
5294             {
5295                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLCLICK, value);
5296             }
5297             remove
5298             {
5299                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLCLICK, value);
5300             }
5301         }
5302
5303         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellContentClick"]/*‘ />
5304         [
5305             SRCategory(SR.CatMouse),
5306             SRDescription(SR.DataGridView_CellContentClick)
5307         ]
5308         public event DataGridViewCellEventHandler CellContentClick
5309         {
5310             add
5311             {
5312                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLCONTENTCLICK, value);
5313             }
5314             remove
5315             {
5316                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLCONTENTCLICK, value);
5317             }
5318         }
5319
5320         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellContentDoubleClick"]/*‘ />
5321         [
5322             SRCategory(SR.CatMouse),
5323             SRDescription(SR.DataGridView_CellContentDoubleClick)
5324         ]
5325         public event DataGridViewCellEventHandler CellContentDoubleClick
5326         {
5327             add
5328             {
5329                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLCONTENTDOUBLECLICK, value);
5330             }
5331             remove
5332             {
5333                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLCONTENTDOUBLECLICK, value);
5334             }
5335         }
5336
5337         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellContextMenuStripChanged"]/*‘ />
5338         [
5339             SRCategory(SR.CatAction),
5340             SRDescription(SR.DataGridView_CellContextMenuStripChanged),
5341             EditorBrowsable(EditorBrowsableState.Advanced)
5342         ]
5343         public event DataGridViewCellEventHandler CellContextMenuStripChanged
5344         {
5345             add
5346             {
5347                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLCONTEXTMENUSTRIPCHANGED, value);
5348             }
5349             remove
5350             {
5351                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLCONTEXTMENUSTRIPCHANGED, value);
5352             }
5353         }
5354
5355         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellContextMenuStripNeeded"]/*‘ />
5356         [
5357             SRCategory(SR.CatBehavior),
5358             SRDescription(SR.DataGridView_CellContextMenuStripNeeded),
5359             EditorBrowsable(EditorBrowsableState.Advanced)
5360         ]
5361         public event DataGridViewCellContextMenuStripNeededEventHandler CellContextMenuStripNeeded
5362         {
5363             add
5364             {
5365                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLCONTEXTMENUSTRIPNEEDED, value);
5366             }
5367             remove
5368             {
5369                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLCONTEXTMENUSTRIPNEEDED, value);
5370             }
5371         }
5372
5373         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellDoubleClick"]/*‘ />
5374         [
5375             SRCategory(SR.CatMouse),
5376             SRDescription(SR.DataGridView_CellDoubleClickDescr)
5377         ]
5378         public event DataGridViewCellEventHandler CellDoubleClick
5379         {
5380             add
5381             {
5382                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLDOUBLECLICK, value);
5383             }
5384             remove
5385             {
5386                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLDOUBLECLICK, value);
5387             }
5388         }
5389
5390         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellEndEdit"]/*‘ />
5391         [
5392             SRCategory(SR.CatData),
5393             SRDescription(SR.DataGridView_CellEndEditDescr)
5394         ]
5395         public event DataGridViewCellEventHandler CellEndEdit
5396         {
5397             add
5398             {
5399                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLENDEDIT, value);
5400             }
5401             remove
5402             {
5403                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLENDEDIT, value);
5404             }
5405         }
5406
5407         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellEnter"]/*‘ />
5408         [
5409             SRCategory(SR.CatFocus),
5410             SRDescription(SR.DataGridView_CellEnterDescr)
5411         ]
5412         public event DataGridViewCellEventHandler CellEnter
5413         {
5414             add
5415             {
5416                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLENTER, value);
5417             }
5418             remove
5419             {
5420                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLENTER, value);
5421             }
5422         }
5423
5424         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellErrorTextChanged"]/*‘ />
5425         [
5426             SRCategory(SR.CatPropertyChanged),
5427             SRDescription(SR.DataGridView_CellErrorTextChangedDescr)
5428         ]
5429         public event DataGridViewCellEventHandler CellErrorTextChanged
5430         {
5431             add
5432             {
5433                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLERRORTEXTCHANGED, value);
5434             }
5435             remove
5436             {
5437                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLERRORTEXTCHANGED, value);
5438             }
5439         }
5440
5441         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellErrorTextNeeded"]/*‘ />
5442         [
5443             SRCategory(SR.CatData),
5444             EditorBrowsable(EditorBrowsableState.Advanced),
5445             SRDescription(SR.DataGridView_CellErrorTextNeededDescr)
5446         ]
5447         public event DataGridViewCellErrorTextNeededEventHandler CellErrorTextNeeded
5448         {
5449             add
5450             {
5451                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLERRORTEXTNEEDED, value);
5452             }
5453             remove
5454             {
5455                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLERRORTEXTNEEDED, value);
5456             }
5457         }
5458
5459         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellFormatting"]/*‘ />
5460         [
5461             SRCategory(SR.CatDisplay),
5462             SRDescription(SR.DataGridView_CellFormattingDescr)
5463         ]
5464         public event DataGridViewCellFormattingEventHandler CellFormatting
5465         {
5466             add
5467             {
5468                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLFORMATTING, value);
5469             }
5470             remove
5471             {
5472                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLFORMATTING, value);
5473             }
5474         }
5475
5476         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellLeave"]/*‘ />
5477         [
5478             SRCategory(SR.CatFocus),
5479             SRDescription(SR.DataGridView_CellLeaveDescr)
5480         ]
5481         public event DataGridViewCellEventHandler CellLeave
5482         {
5483             add
5484             {
5485                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLLEAVE, value);
5486             }
5487             remove
5488             {
5489                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLLEAVE, value);
5490             }
5491         }
5492
5493         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellMouseClick"]/*‘ />
5494         [
5495             SRCategory(SR.CatMouse),
5496             SRDescription(SR.DataGridView_CellMouseClickDescr)
5497         ]
5498         public event DataGridViewCellMouseEventHandler CellMouseClick
5499         {
5500             add
5501             {
5502                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLMOUSECLICK, value);
5503             }
5504             remove
5505             {
5506                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLMOUSECLICK, value);
5507             }
5508         }
5509
5510         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellMouseDoubleClick"]/*‘ />
5511         [
5512             SRCategory(SR.CatMouse),
5513             SRDescription(SR.DataGridView_CellMouseDoubleClickDescr)
5514         ]
5515         public event DataGridViewCellMouseEventHandler CellMouseDoubleClick
5516         {
5517             add
5518             {
5519                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLMOUSEDOUBLECLICK, value);
5520             }
5521             remove
5522             {
5523                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLMOUSEDOUBLECLICK, value);
5524             }
5525         }
5526
5527         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellMouseDown"]/*‘ />
5528         [
5529             SRCategory(SR.CatMouse),
5530             SRDescription(SR.DataGridView_CellMouseDownDescr)
5531         ]
5532         public event DataGridViewCellMouseEventHandler CellMouseDown
5533         {
5534             add
5535             {
5536                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLMOUSEDOWN, value);
5537             }
5538             remove
5539             {
5540                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLMOUSEDOWN, value);
5541             }
5542         }
5543
5544         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellMouseEnter"]/*‘ />
5545         [
5546             SRCategory(SR.CatMouse),
5547             SRDescription(SR.DataGridView_CellMouseEnterDescr)
5548         ]
5549         public event DataGridViewCellEventHandler CellMouseEnter
5550         {
5551             add
5552             {
5553                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLMOUSEENTER, value);
5554             }
5555             remove
5556             {
5557                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLMOUSEENTER, value);
5558             }
5559         }
5560
5561         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellMouseLeave"]/*‘ />
5562         [
5563             SRCategory(SR.CatMouse),
5564             SRDescription(SR.DataGridView_CellMouseLeaveDescr)
5565         ]
5566         public event DataGridViewCellEventHandler CellMouseLeave
5567         {
5568             add
5569             {
5570                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLMOUSELEAVE, value);
5571             }
5572             remove
5573             {
5574                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLMOUSELEAVE, value);
5575             }
5576         }
5577
5578         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellMouseMove"]/*‘ />
5579         [
5580             SRCategory(SR.CatMouse),
5581             SRDescription(SR.DataGridView_CellMouseMoveDescr)
5582         ]
5583         public event DataGridViewCellMouseEventHandler CellMouseMove
5584         {
5585             add
5586             {
5587                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLMOUSEMOVE, value);
5588             }
5589             remove
5590             {
5591                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLMOUSEMOVE, value);
5592             }
5593         }
5594
5595         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellMouseUp"]/*‘ />
5596         [
5597             SRCategory(SR.CatMouse),
5598             SRDescription(SR.DataGridView_CellMouseUpDescr)
5599         ]
5600         public event DataGridViewCellMouseEventHandler CellMouseUp
5601         {
5602             add
5603             {
5604                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLMOUSEUP, value);
5605             }
5606             remove
5607             {
5608                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLMOUSEUP, value);
5609             }
5610         }
5611
5612         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellPainting"]/*‘ />
5613         [
5614             SRCategory(SR.CatDisplay),
5615             SRDescription(SR.DataGridView_CellPaintingDescr)
5616         ]
5617         public event DataGridViewCellPaintingEventHandler CellPainting
5618         {
5619             add
5620             {
5621                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLPAINTING, value);
5622             }
5623             remove
5624             {
5625                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLPAINTING, value);
5626             }
5627         }
5628
5629         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellParsing"]/*‘ />
5630         [
5631             SRCategory(SR.CatDisplay),
5632             SRDescription(SR.DataGridView_CellParsingDescr)
5633         ]
5634         public event DataGridViewCellParsingEventHandler CellParsing
5635         {
5636             add
5637             {
5638                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLPARSING, value);
5639             }
5640             remove
5641             {
5642                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLPARSING, value);
5643             }
5644         }
5645
5646         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellStateChanged"]/*‘ />
5647         [
5648             SRCategory(SR.CatBehavior),
5649             SRDescription(SR.DataGridView_CellStateChangedDescr)
5650         ]
5651         public event DataGridViewCellStateChangedEventHandler CellStateChanged
5652         {
5653             add
5654             {
5655                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLSTATECHANGED, value);
5656             }
5657             remove
5658             {
5659                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLSTATECHANGED, value);
5660             }
5661         }
5662
5663         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellStyleChanged"]/*‘ />
5664         [
5665             SRCategory(SR.CatPropertyChanged),
5666             SRDescription(SR.DataGridView_CellStyleChangedDescr)
5667         ]
5668         public event DataGridViewCellEventHandler CellStyleChanged
5669         {
5670             add
5671             {
5672                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLSTYLECHANGED, value);
5673             }
5674             remove
5675             {
5676                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLSTYLECHANGED, value);
5677             }
5678         }
5679
5680         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellStyleContentChanged"]/*‘ />
5681         [
5682             SRCategory(SR.CatPropertyChanged),
5683             SRDescription(SR.DataGridView_CellStyleContentChangedDescr)
5684         ]
5685         public event DataGridViewCellStyleContentChangedEventHandler CellStyleContentChanged
5686         {
5687             add
5688             {
5689                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLSTYLECONTENTCHANGED, value);
5690             }
5691             remove
5692             {
5693                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLSTYLECONTENTCHANGED, value);
5694             }
5695         }
5696
5697         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellToolTipTextChanged"]/*‘ />
5698         [
5699             SRCategory(SR.CatPropertyChanged),
5700             SRDescription(SR.DataGridView_CellToolTipTextChangedDescr)
5701         ]
5702         public event DataGridViewCellEventHandler CellToolTipTextChanged
5703         {
5704             add
5705             {
5706                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLTOOLTIPTEXTCHANGED, value);
5707             }
5708             remove
5709             {
5710                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLTOOLTIPTEXTCHANGED, value);
5711             }
5712         }
5713
5714         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellToolTipTextNeeded"]/*‘ />
5715         [
5716             SRCategory(SR.CatBehavior),
5717             SRDescription(SR.DataGridView_CellToolTipTextNeededDescr),
5718             EditorBrowsable(EditorBrowsableState.Advanced)
5719         ]
5720         public event DataGridViewCellToolTipTextNeededEventHandler CellToolTipTextNeeded
5721         {
5722             add
5723             {
5724                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLTOOLTIPTEXTNEEDED, value);
5725             }
5726             remove
5727             {
5728                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLTOOLTIPTEXTNEEDED, value);
5729             }
5730         }
5731
5732         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellValidated"]/*‘ />
5733         [
5734             SRCategory(SR.CatFocus),
5735             SRDescription(SR.DataGridView_CellValidatedDescr)
5736         ]
5737         public event DataGridViewCellEventHandler CellValidated
5738         {
5739             add
5740             {
5741                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLVALIDATED, value);
5742             }
5743             remove
5744             {
5745                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLVALIDATED, value);
5746             }
5747         }
5748
5749         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellValidating"]/*‘ />
5750         [
5751             SRCategory(SR.CatFocus),
5752             SRDescription(SR.DataGridView_CellValidatingDescr)
5753         ]
5754         public event DataGridViewCellValidatingEventHandler CellValidating
5755         {
5756             add
5757             {
5758                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLVALIDATING, value);
5759             }
5760             remove
5761             {
5762                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLVALIDATING, value);
5763             }
5764         }
5765
5766         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellValueChanged"]/*‘ />
5767         [
5768             SRCategory(SR.CatAction),
5769             SRDescription(SR.DataGridView_CellValueChangedDescr)
5770         ]
5771         public event DataGridViewCellEventHandler CellValueChanged
5772         {
5773             add
5774             {
5775                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLVALUECHANGED, value);
5776             }
5777             remove
5778             {
5779                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLVALUECHANGED, value);
5780             }
5781         }
5782
5783         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellValueNeeded"]/*‘ />
5784         [
5785             SRCategory(SR.CatData),
5786             EditorBrowsable(EditorBrowsableState.Advanced),
5787             SRDescription(SR.DataGridView_CellValueNeededDescr)
5788         ]
5789         public event DataGridViewCellValueEventHandler CellValueNeeded
5790         {
5791             add
5792             {
5793                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLVALUENEEDED, value);
5794             }
5795             remove
5796             {
5797                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLVALUENEEDED, value);
5798             }
5799         }
5800
5801         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CellValuePushed"]/*‘ />
5802         [
5803             SRCategory(SR.CatData),
5804             EditorBrowsable(EditorBrowsableState.Advanced),
5805             SRDescription(SR.DataGridView_CellValuePushedDescr)
5806         ]
5807         public event DataGridViewCellValueEventHandler CellValuePushed
5808         {
5809             add
5810             {
5811                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCELLVALUEPUSHED, value);
5812             }
5813             remove
5814             {
5815                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLVALUEPUSHED, value);
5816             }
5817         }
5818
5819         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnAdded"]/*‘ />
5820         [
5821             SRCategory(SR.CatAction),
5822             SRDescription(SR.DataGridView_ColumnAddedDescr)
5823         ]
5824         public event DataGridViewColumnEventHandler ColumnAdded
5825         {
5826             add
5827             {
5828                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNADDED, value);
5829             }
5830             remove
5831             {
5832                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNADDED, value);
5833             }
5834         }
5835
5836         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnContextMenuStripChanged"]/*‘ />
5837         [
5838             SRCategory(SR.CatPropertyChanged),
5839             SRDescription(SR.DataGridView_ColumnContextMenuStripChangedDescr)
5840         ]
5841         public event DataGridViewColumnEventHandler ColumnContextMenuStripChanged
5842         {
5843             add
5844             {
5845                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNCONTEXTMENUSTRIPCHANGED, value);
5846             }
5847             remove
5848             {
5849                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNCONTEXTMENUSTRIPCHANGED, value);
5850             }
5851         }
5852
5853         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnDataPropertyNameChanged"]/*‘ />
5854         [
5855             SRCategory(SR.CatPropertyChanged),
5856             SRDescription(SR.DataGridView_ColumnDataPropertyNameChangedDescr)
5857         ]
5858         public event DataGridViewColumnEventHandler ColumnDataPropertyNameChanged
5859         {
5860             add
5861             {
5862                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNDATAPROPERTYNAMECHANGED, value);
5863             }
5864             remove
5865             {
5866                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNDATAPROPERTYNAMECHANGED, value);
5867             }
5868         }
5869
5870         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnDefaultCellStyleChanged"]/*‘ />
5871         [
5872             SRCategory(SR.CatPropertyChanged),
5873             SRDescription(SR.DataGridView_ColumnDefaultCellStyleChangedDescr)
5874         ]
5875         public event DataGridViewColumnEventHandler ColumnDefaultCellStyleChanged
5876         {
5877             add
5878             {
5879                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNDEFAULTCELLSTYLECHANGED, value);
5880             }
5881             remove
5882             {
5883                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNDEFAULTCELLSTYLECHANGED, value);
5884             }
5885         }
5886
5887         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnDisplayIndexChanged"]/*‘ />
5888         [
5889             SRCategory(SR.CatPropertyChanged),
5890             SRDescription(SR.DataGridView_ColumnDisplayIndexChangedDescr)
5891         ]
5892         public event DataGridViewColumnEventHandler ColumnDisplayIndexChanged
5893         {
5894             add
5895             {
5896                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNDISPLAYINDEXCHANGED, value);
5897             }
5898             remove
5899             {
5900                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNDISPLAYINDEXCHANGED, value);
5901             }
5902         }
5903
5904         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnDividerDoubleClick"]/*‘ />
5905         [
5906             SRCategory(SR.CatMouse),
5907             SRDescription(SR.DataGridView_ColumnDividerDoubleClickDescr)
5908         ]
5909         public event DataGridViewColumnDividerDoubleClickEventHandler ColumnDividerDoubleClick
5910         {
5911             add
5912             {
5913                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNDIVIDERDOUBLECLICK, value);
5914             }
5915             remove
5916             {
5917                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNDIVIDERDOUBLECLICK, value);
5918             }
5919         }
5920
5921         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnDividerWidthChanged"]/*‘ />
5922         [
5923             SRCategory(SR.CatPropertyChanged),
5924             SRDescription(SR.DataGridView_ColumnDividerWidthChangedDescr)
5925         ]
5926         public event DataGridViewColumnEventHandler ColumnDividerWidthChanged
5927         {
5928             add
5929             {
5930                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNDIVIDERWIDTHCHANGED, value);
5931             }
5932             remove
5933             {
5934                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNDIVIDERWIDTHCHANGED, value);
5935             }
5936         }
5937
5938         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeaderMouseClick"]/*‘ />
5939         [
5940             SRCategory(SR.CatMouse),
5941             SRDescription(SR.DataGridView_ColumnHeaderMouseClickDescr)
5942         ]
5943         public event DataGridViewCellMouseEventHandler ColumnHeaderMouseClick
5944         {
5945             add
5946             {
5947                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERMOUSECLICK, value);
5948             }
5949             remove
5950             {
5951                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERMOUSECLICK, value);
5952             }
5953         }
5954
5955         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeaderMouseDoubleClick"]/*‘ />
5956         [
5957             SRCategory(SR.CatMouse),
5958             SRDescription(SR.DataGridView_ColumnHeaderMouseDoubleClickDescr)
5959         ]
5960         public event DataGridViewCellMouseEventHandler ColumnHeaderMouseDoubleClick
5961         {
5962             add
5963             {
5964                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERMOUSEDOUBLECLICK, value);
5965             }
5966             remove
5967             {
5968                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERMOUSEDOUBLECLICK, value);
5969             }
5970         }
5971
5972         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnHeaderCellChanged"]/*‘ />
5973         [
5974             SRCategory(SR.CatPropertyChanged),
5975             SRDescription(SR.DataGridView_ColumnHeaderCellChangedDescr)
5976         ]
5977         public event DataGridViewColumnEventHandler ColumnHeaderCellChanged
5978         {
5979             add
5980             {
5981                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERCELLCHANGED, value);
5982             }
5983             remove
5984             {
5985                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNHEADERCELLCHANGED, value);
5986             }
5987         }
5988
5989         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnMinimumWidthChanged"]/*‘ />
5990         [
5991             SRCategory(SR.CatPropertyChanged),
5992             SRDescription(SR.DataGridView_ColumnMinimumWidthChangedDescr)
5993         ]
5994         public event DataGridViewColumnEventHandler ColumnMinimumWidthChanged
5995         {
5996             add
5997             {
5998                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNMINIMUMWIDTHCHANGED, value);
5999             }
6000             remove
6001             {
6002                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNMINIMUMWIDTHCHANGED, value);
6003             }
6004         }
6005
6006         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnNameChanged"]/*‘ />
6007         [
6008             SRCategory(SR.CatPropertyChanged),
6009             SRDescription(SR.DataGridView_ColumnNameChangedDescr)
6010         ]
6011         public event DataGridViewColumnEventHandler ColumnNameChanged
6012         {
6013             add
6014             {
6015                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNNAMECHANGED, value);
6016             }
6017             remove
6018             {
6019                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNNAMECHANGED, value);
6020             }
6021         }
6022
6023         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnRemoved"]/*‘ />
6024         [
6025             SRCategory(SR.CatAction),
6026             SRDescription(SR.DataGridView_ColumnRemovedDescr)
6027         ]
6028         public event DataGridViewColumnEventHandler ColumnRemoved
6029         {
6030             add
6031             {
6032                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNREMOVED, value);
6033             }
6034             remove
6035             {
6036                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNREMOVED, value);
6037             }
6038         }
6039
6040         /*/// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnsDefaultCellStyleChanged"]/*‘ />
6041         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnsDefaultCellStyleChanged"]/*‘ />
6042         public event EventHandler ColumnsDefaultCellStyleChanged
6043         {
6044             add
6045             {
6046                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNSDEFAULTCELLSTYLECHANGED, value);
6047             }
6048             remove
6049             {
6050                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNSDEFAULTCELLSTYLECHANGED, value);
6051             }
6052         }*/
6053
6054         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnSortModeChanged"]/*‘ />
6055         [
6056             SRCategory(SR.CatBehavior),
6057             SRDescription(SR.DataGridViewColumnSortModeChangedDescr)
6058         ]
6059         public event DataGridViewColumnEventHandler ColumnSortModeChanged
6060         {
6061             add
6062             {
6063                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNSORTMODECHANGED, value);
6064             }
6065             remove
6066             {
6067                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNSORTMODECHANGED, value);
6068             }
6069         }
6070
6071         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnStateChanged"]/*‘ />
6072         [
6073             SRCategory(SR.CatBehavior),
6074             SRDescription(SR.DataGridView_ColumnStateChangedDescr)
6075         ]
6076         public event DataGridViewColumnStateChangedEventHandler ColumnStateChanged
6077         {
6078             add
6079             {
6080                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNSTATECHANGED, value);
6081             }
6082             remove
6083             {
6084                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNSTATECHANGED, value);
6085             }
6086         }
6087
6088         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnToolTipTextChanged"]/*‘ />
6089         [
6090             SRCategory(SR.CatPropertyChanged),
6091             SRDescription(SR.DataGridView_ColumnToolTipTextChangedDescr)
6092         ]
6093         public event DataGridViewColumnEventHandler ColumnToolTipTextChanged
6094         {
6095             add
6096             {
6097                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNTOOLTIPTEXTCHANGED, value);
6098             }
6099             remove
6100             {
6101                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNTOOLTIPTEXTCHANGED, value);
6102             }
6103         }
6104
6105         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.ColumnWidthChanged"]/*‘ />
6106         [
6107             SRCategory(SR.CatAction),
6108             SRDescription(SR.DataGridView_ColumnWidthChangedDescr)
6109         ]
6110         public event DataGridViewColumnEventHandler ColumnWidthChanged
6111         {
6112             add
6113             {
6114                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCOLUMNWIDTHCHANGED, value);
6115             }
6116             remove
6117             {
6118                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCOLUMNWIDTHCHANGED, value);
6119             }
6120         }
6121
6122         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CurrentCellChanged"]/*‘ />
6123         [
6124             SRCategory(SR.CatAction),
6125             SRDescription(SR.DataGridView_CurrentCellChangedDescr)
6126         ]
6127         public event EventHandler CurrentCellChanged
6128         {
6129             add
6130             {
6131                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCURRENTCELLCHANGED, value);
6132             }
6133             remove
6134             {
6135                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCURRENTCELLCHANGED, value);
6136             }
6137         }
6138
6139         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.CurrentCellDirtyStateChanged"]/*‘ />
6140         [
6141             SRCategory(SR.CatBehavior),
6142             EditorBrowsable(EditorBrowsableState.Advanced),
6143             SRDescription(SR.DataGridView_CurrentCellDirtyStateChangedDescr)
6144         ]
6145         public event EventHandler CurrentCellDirtyStateChanged
6146         {
6147             add
6148             {
6149                 this.Events.AddHandler(EVENT_DATAGRIDVIEWCURRENTCELLDIRTYSTATECHANGED, value);
6150             }
6151             remove
6152             {
6153                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWCURRENTCELLDIRTYSTATECHANGED, value);
6154             }
6155         }
6156
6157         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.BindingComplete"]/*‘ />
6158         [
6159             SRCategory(SR.CatData),
6160             SRDescription(SR.DataGridView_DataBindingCompleteDescr)
6161         ]
6162         public event DataGridViewBindingCompleteEventHandler DataBindingComplete
6163         {
6164             add
6165             {
6166                 this.Events.AddHandler(EVENT_DATAGRIDVIEWDATABINDINGCOMPLETE, value);
6167             }
6168             remove
6169             {
6170                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWDATABINDINGCOMPLETE, value);
6171             }
6172         }
6173
6174         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DataError"]/*‘ />
6175         [
6176             SRCategory(SR.CatBehavior),
6177             SRDescription(SR.DataGridView_DataErrorDescr)
6178         ]
6179         public event DataGridViewDataErrorEventHandler DataError
6180         {
6181             add
6182             {
6183                 this.Events.AddHandler(EVENT_DATAGRIDVIEWDATAERROR, value);
6184             }
6185             remove
6186             {
6187                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWDATAERROR, value);
6188             }
6189         }
6190
6191         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.DefaultValuesNeeded"]/*‘ />
6192         [
6193             SRCategory(SR.CatData),
6194             EditorBrowsable(EditorBrowsableState.Advanced),
6195             SRDescription(SR.DataGridView_DefaultValuesNeededDescr)
6196         ]
6197         public event DataGridViewRowEventHandler DefaultValuesNeeded
6198         {
6199             add
6200             {
6201                 this.Events.AddHandler(EVENT_DATAGRIDVIEWDEFAULTVALUESNEEDED, value);
6202             }
6203             remove
6204             {
6205                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWDEFAULTVALUESNEEDED, value);
6206             }
6207         }
6208
6209         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.EditingControlShowing"]/*‘ />
6210         [
6211             SRCategory(SR.CatAction),
6212             SRDescription(SR.DataGridView_EditingControlShowingDescr)
6213         ]
6214         public event DataGridViewEditingControlShowingEventHandler EditingControlShowing
6215         {
6216             add
6217             {
6218                 this.Events.AddHandler(EVENT_DATAGRIDVIEWEDITINGCONTROLSHOWING, value);
6219             }
6220             remove
6221             {
6222                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWEDITINGCONTROLSHOWING, value);
6223             }
6224         }
6225
6226         /*
6227         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.KeepNewRow"]/*‘ />
6228         public event QuestionEventHandler KeepNewRow
6229         {
6230             add
6231             {
6232                 this.Events.AddHandler(EVENT_DATAGRIDVIEWKEEPNEWROW, value);
6233             }
6234             remove
6235             {
6236                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWKEEPNEWROW, value);
6237             }
6238         }*/
6239
6240         /*/// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.NewRowDiscarded"]/*‘ />
6241         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.NewRowDiscarded"]/*‘ />
6242         public event EventHandler NewRowDiscarded
6243         {
6244             add
6245             {
6246                 this.Events.AddHandler(EVENT_DATAGRIDVIEWNEWROWDISCARDED, value);
6247             }
6248             remove
6249             {
6250                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWNEWROWDISCARDED, value);
6251             }
6252         }*/
6253
6254         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.NewRowNeeded"]/*‘ />
6255         [
6256             SRCategory(SR.CatData),
6257             SRDescription(SR.DataGridView_NewRowNeededDescr)
6258         ]
6259         public event DataGridViewRowEventHandler NewRowNeeded
6260         {
6261             add
6262             {
6263                 this.Events.AddHandler(EVENT_DATAGRIDVIEWNEWROWNEEDED, value);
6264             }
6265             remove
6266             {
6267                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWNEWROWNEEDED, value);
6268             }
6269         }
6270
6271         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowContextMenuStripChanged"]/*‘ />
6272         [
6273             SRCategory(SR.CatPropertyChanged),
6274             SRDescription(SR.DataGridView_RowContextMenuStripChangedDescr)
6275         ]
6276         public event DataGridViewRowEventHandler RowContextMenuStripChanged
6277         {
6278             add
6279             {
6280                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWCONTEXTMENUSTRIPCHANGED, value);
6281             }
6282             remove
6283             {
6284                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWCONTEXTMENUSTRIPCHANGED, value);
6285             }
6286         }
6287
6288         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowContextMenuStripNeeded"]/*‘ />
6289         [
6290             SRCategory(SR.CatData),
6291             EditorBrowsable(EditorBrowsableState.Advanced),
6292             SRDescription(SR.DataGridView_RowContextMenuStripNeededDescr)
6293         ]
6294         public event DataGridViewRowContextMenuStripNeededEventHandler RowContextMenuStripNeeded
6295         {
6296             add
6297             {
6298                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWCONTEXTMENUSTRIPNEEDED, value);
6299             }
6300             remove
6301             {
6302                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWCONTEXTMENUSTRIPNEEDED, value);
6303             }
6304         }
6305
6306         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowDefaultCellStyleChanged"]/*‘ />
6307         [
6308             SRCategory(SR.CatPropertyChanged),
6309             SRDescription(SR.DataGridView_RowDefaultCellStyleChangedDescr)
6310         ]
6311         public event DataGridViewRowEventHandler RowDefaultCellStyleChanged
6312         {
6313             add
6314             {
6315                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWDEFAULTCELLSTYLECHANGED, value);
6316             }
6317             remove
6318             {
6319                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWDEFAULTCELLSTYLECHANGED, value);
6320             }
6321         }
6322
6323         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowDirtyStateNeeded"]/*‘ />
6324         [
6325             SRCategory(SR.CatData),
6326             EditorBrowsable(EditorBrowsableState.Advanced),
6327             SRDescription(SR.DataGridView_RowDirtyStateNeededDescr)
6328         ]
6329         public event QuestionEventHandler RowDirtyStateNeeded
6330         {
6331             add
6332             {
6333                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWDIRTYSTATENEEDED, value);
6334             }
6335             remove
6336             {
6337                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWDIRTYSTATENEEDED, value);
6338             }
6339         }
6340
6341         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowDividerDoubleClick"]/*‘ />
6342         [
6343             SRCategory(SR.CatMouse),
6344             SRDescription(SR.DataGridView_RowDividerDoubleClickDescr)
6345         ]
6346         public event DataGridViewRowDividerDoubleClickEventHandler RowDividerDoubleClick
6347         {
6348             add
6349             {
6350                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWDIVIDERDOUBLECLICK, value);
6351             }
6352             remove
6353             {
6354                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWDIVIDERDOUBLECLICK, value);
6355             }
6356         }
6357
6358         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowDividerHeightChanged"]/*‘ />
6359         [
6360             SRCategory(SR.CatAppearance),
6361             SRDescription(SR.DataGridView_RowDividerHeightChangedDescr)
6362         ]
6363         public event DataGridViewRowEventHandler RowDividerHeightChanged
6364         {
6365             add
6366             {
6367                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWDIVIDERHEIGHTCHANGED, value);
6368             }
6369             remove
6370             {
6371                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWDIVIDERHEIGHTCHANGED, value);
6372             }
6373         }
6374
6375         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowEnter"]/*‘ />
6376         [
6377             SRCategory(SR.CatFocus),
6378             SRDescription(SR.DataGridView_RowEnterDescr)
6379         ]
6380         public event DataGridViewCellEventHandler RowEnter
6381         {
6382             add
6383             {
6384                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWENTER, value);
6385             }
6386             remove
6387             {
6388                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWENTER, value);
6389             }
6390         }
6391
6392         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowErrorTextChanged"]/*‘ />
6393         [
6394             SRCategory(SR.CatPropertyChanged),
6395             SRDescription(SR.DataGridView_RowErrorTextChangedDescr)
6396         ]
6397         public event DataGridViewRowEventHandler RowErrorTextChanged
6398         {
6399             add
6400             {
6401                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWERRORTEXTCHANGED, value);
6402             }
6403             remove
6404             {
6405                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWERRORTEXTCHANGED, value);
6406             }
6407         }
6408
6409         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowErrorTextNeeded"]/*‘ />
6410         [
6411             SRCategory(SR.CatData),
6412             EditorBrowsable(EditorBrowsableState.Advanced),
6413             SRDescription(SR.DataGridView_RowErrorTextNeededDescr)
6414         ]
6415         public event DataGridViewRowErrorTextNeededEventHandler RowErrorTextNeeded
6416         {
6417             add
6418             {
6419                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWERRORTEXTNEEDED, value);
6420             }
6421             remove
6422             {
6423                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWERRORTEXTNEEDED, value);
6424             }
6425         }
6426
6427         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeaderMouseClick"]/*‘ />
6428         [
6429             SRCategory(SR.CatMouse),
6430             SRDescription(SR.DataGridView_RowHeaderMouseClickDescr)
6431         ]
6432         public event DataGridViewCellMouseEventHandler RowHeaderMouseClick
6433         {
6434             add
6435             {
6436                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEADERMOUSECLICK, value);
6437             }
6438             remove
6439             {
6440                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEADERMOUSECLICK, value);
6441             }
6442         }
6443
6444         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeaderMouseDoubleClick"]/*‘ />
6445         [
6446             SRCategory(SR.CatMouse),
6447             SRDescription(SR.DataGridView_RowHeaderMouseDoubleClickDescr)
6448         ]
6449         public event DataGridViewCellMouseEventHandler RowHeaderMouseDoubleClick
6450         {
6451             add
6452             {
6453                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEADERMOUSEDOUBLECLICK, value);
6454             }
6455             remove
6456             {
6457                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEADERMOUSEDOUBLECLICK, value);
6458             }
6459         }
6460
6461         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeaderCellChanged"]/*‘ />
6462         [
6463             SRCategory(SR.CatPropertyChanged),
6464             SRDescription(SR.DataGridView_RowHeaderCellChangedDescr)
6465         ]
6466         public event DataGridViewRowEventHandler RowHeaderCellChanged
6467         {
6468             add
6469             {
6470                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEADERCELLCHANGED, value);
6471             }
6472             remove
6473             {
6474                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEADERCELLCHANGED, value);
6475             }
6476         }
6477
6478         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeightChanged"]/*‘ />
6479         [
6480             SRCategory(SR.CatPropertyChanged),
6481             SRDescription(SR.DataGridView_RowHeightChangedDescr)
6482         ]
6483         public event DataGridViewRowEventHandler RowHeightChanged
6484         {
6485             add
6486             {
6487                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEIGHTCHANGED, value);
6488             }
6489             remove
6490             {
6491                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEIGHTCHANGED, value);
6492             }
6493         }
6494
6495         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeightInfoNeeded"]/*‘ />
6496         [
6497             SRCategory(SR.CatData),
6498             EditorBrowsable(EditorBrowsableState.Advanced),
6499             SRDescription(SR.DataGridView_RowHeightInfoNeededDescr)
6500         ]
6501         public event DataGridViewRowHeightInfoNeededEventHandler RowHeightInfoNeeded
6502         {
6503             add
6504             {
6505                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEIGHTINFONEEDED, value);
6506             }
6507             remove
6508             {
6509                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEIGHTINFONEEDED, value);
6510             }
6511         }
6512
6513         internal DataGridViewRowHeightInfoNeededEventArgs RowHeightInfoNeededEventArgs
6514         {
6515             get
6516             {
6517                 if (this.dgvrhine == null)
6518                 {
6519                     this.dgvrhine = new DataGridViewRowHeightInfoNeededEventArgs();
6520                 }
6521                 return this.dgvrhine;
6522             }
6523         }
6524
6525         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowHeightInfoPushed"]/*‘ />
6526         [
6527             SRCategory(SR.CatData),
6528             EditorBrowsable(EditorBrowsableState.Advanced),
6529             SRDescription(SR.DataGridView_RowHeightInfoPushedDescr)
6530         ]
6531         public event DataGridViewRowHeightInfoPushedEventHandler RowHeightInfoPushed
6532         {
6533             add
6534             {
6535                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWHEIGHTINFOPUSHED, value);
6536             }
6537             remove
6538             {
6539                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWHEIGHTINFOPUSHED, value);
6540             }
6541         }
6542
6543         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowLeave"]/*‘ />
6544         [
6545             SRCategory(SR.CatFocus),
6546             SRDescription(SR.DataGridView_RowLeaveDescr)
6547         ]
6548         public event DataGridViewCellEventHandler RowLeave
6549         {
6550             add
6551             {
6552                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWLEAVE, value);
6553             }
6554             remove
6555             {
6556                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWLEAVE, value);
6557             }
6558         }
6559
6560         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowMinimumHeightChanged"]/*‘ />
6561         [
6562             SRCategory(SR.CatPropertyChanged),
6563             SRDescription(SR.DataGridView_RowMinimumHeightChangedDescr)
6564         ]
6565         public event DataGridViewRowEventHandler RowMinimumHeightChanged
6566         {
6567             add
6568             {
6569                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWMINIMUMHEIGHTCHANGED, value);
6570             }
6571             remove
6572             {
6573                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWMINIMUMHEIGHTCHANGED, value);
6574             }
6575         }
6576
6577         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowPostPaint"]/*‘ />
6578         [
6579             SRCategory(SR.CatDisplay),
6580             SRDescription(SR.DataGridView_RowPostPaintDescr)
6581         ]
6582         public event DataGridViewRowPostPaintEventHandler RowPostPaint
6583         {
6584             add
6585             {
6586                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWPOSTPAINT, value);
6587             }
6588             remove
6589             {
6590                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWPOSTPAINT, value);
6591             }
6592         }
6593
6594         internal DataGridViewRowPostPaintEventArgs RowPostPaintEventArgs
6595         {
6596             get
6597             {
6598                 if (this.dgvrpope == null)
6599                 {
6600                     this.dgvrpope = new DataGridViewRowPostPaintEventArgs(this);
6601                 }
6602                 return this.dgvrpope;
6603             }
6604         }
6605
6606         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowPrePaint"]/*‘ />
6607         [
6608             SRCategory(SR.CatDisplay),
6609             SRDescription(SR.DataGridView_RowPrePaintDescr)
6610         ]
6611         public event DataGridViewRowPrePaintEventHandler RowPrePaint
6612         {
6613             add
6614             {
6615                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWPREPAINT, value);
6616             }
6617             remove
6618             {
6619                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWPREPAINT, value);
6620             }
6621         }
6622
6623         internal DataGridViewRowPrePaintEventArgs RowPrePaintEventArgs
6624         {
6625             get
6626             {
6627                 if (this.dgvrprpe == null)
6628                 {
6629                     this.dgvrprpe = new DataGridViewRowPrePaintEventArgs(this);
6630                 }
6631                 return this.dgvrprpe;
6632             }
6633         }
6634
6635         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowsAdded"]/*‘ />
6636         [
6637             SRCategory(SR.CatAction),
6638             SRDescription(SR.DataGridView_RowsAddedDescr)
6639         ]
6640         public event DataGridViewRowsAddedEventHandler RowsAdded
6641         {
6642             add
6643             {
6644                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWSADDED, value);
6645             }
6646             remove
6647             {
6648                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWSADDED, value);
6649             }
6650         }
6651
6652         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowsRemoved"]/*‘ />
6653         [
6654             SRCategory(SR.CatAction),
6655             SRDescription(SR.DataGridView_RowsRemovedDescr)
6656         ]
6657         public event DataGridViewRowsRemovedEventHandler RowsRemoved
6658         {
6659             add
6660             {
6661                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWSREMOVED, value);
6662             }
6663             remove
6664             {
6665                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWSREMOVED, value);
6666             }
6667         }
6668
6669         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowStateChanged"]/*‘ />
6670         [
6671             SRCategory(SR.CatBehavior),
6672             SRDescription(SR.DataGridView_RowStateChangedDescr)
6673         ]
6674         public event DataGridViewRowStateChangedEventHandler RowStateChanged
6675         {
6676             add
6677             {
6678                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWSTATECHANGED, value);
6679             }
6680             remove
6681             {
6682                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWSTATECHANGED, value);
6683             }
6684         }
6685
6686         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowUnshared"]/*‘ />
6687         [
6688             SRCategory(SR.CatBehavior),
6689             EditorBrowsable(EditorBrowsableState.Advanced),
6690             SRDescription(SR.DataGridView_RowUnsharedDescr)
6691         ]
6692         public event DataGridViewRowEventHandler RowUnshared
6693         {
6694             add
6695             {
6696                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWUNSHARED, value);
6697             }
6698             remove
6699             {
6700                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWUNSHARED, value);
6701             }
6702         }
6703
6704         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowValidated"]/*‘ />
6705         [
6706             SRCategory(SR.CatFocus),
6707             SRDescription(SR.DataGridView_RowValidatedDescr)
6708         ]
6709         public event DataGridViewCellEventHandler RowValidated
6710         {
6711             add
6712             {
6713                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWVALIDATED, value);
6714             }
6715             remove
6716             {
6717                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWVALIDATED, value);
6718             }
6719         }
6720
6721         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.RowValidating"]/*‘ />
6722         [
6723             SRCategory(SR.CatFocus),
6724             SRDescription(SR.DataGridView_RowValidatingDescr)
6725         ]
6726         public event DataGridViewCellCancelEventHandler RowValidating
6727         {
6728             add
6729             {
6730                 this.Events.AddHandler(EVENT_DATAGRIDVIEWROWVALIDATING, value);
6731             }
6732             remove
6733             {
6734                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWROWVALIDATING, value);
6735             }
6736         }
6737
6738         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.Scroll"]/*‘ />
6739         [
6740             SRCategory(SR.CatAction),
6741             SRDescription(SR.DataGridView_ScrollDescr)
6742         ]
6743         public event ScrollEventHandler Scroll
6744         {
6745             add
6746             {
6747                 this.Events.AddHandler(EVENT_DATAGRIDVIEWSCROLL, value);
6748             }
6749             remove
6750             {
6751                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWSCROLL, value);
6752             }
6753         }
6754
6755         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.SelectionChanged"]/*‘ />
6756         [
6757             SRCategory(SR.CatAction),
6758             SRDescription(SR.DataGridView_SelectionChangedDescr)
6759         ]
6760         public event EventHandler SelectionChanged
6761         {
6762             add
6763             {
6764                 this.Events.AddHandler(EVENT_DATAGRIDVIEWSELECTIONCHANGED, value);
6765             }
6766             remove
6767             {
6768                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWSELECTIONCHANGED, value);
6769             }
6770         }
6771
6772         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.SortCompare"]/*‘ />
6773         [
6774             SRCategory(SR.CatData),
6775             EditorBrowsable(EditorBrowsableState.Advanced),
6776             SRDescription(SR.DataGridView_SortCompareDescr)
6777         ]
6778         public event DataGridViewSortCompareEventHandler SortCompare
6779         {
6780             add
6781             {
6782                 this.Events.AddHandler(EVENT_DATAGRIDVIEWSORTCOMPARE, value);
6783             }
6784             remove
6785             {
6786                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWSORTCOMPARE, value);
6787             }
6788         }
6789
6790         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.Sorted"]/*‘ />
6791         [
6792             SRCategory(SR.CatData),
6793             SRDescription(SR.DataGridView_SortedDescr)
6794         ]
6795         public event EventHandler Sorted
6796         {
6797             add
6798             {
6799                 this.Events.AddHandler(EVENT_DATAGRIDVIEWSORTED, value);
6800             }
6801             remove
6802             {
6803                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWSORTED, value);
6804             }
6805         }
6806
6807         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.StyleChanged"]/*‘ />
6808         /// <internalonly/>
6809         [
6810             Browsable(false),
6811             EditorBrowsable(EditorBrowsableState.Never)
6812         ]
6813         new public event EventHandler StyleChanged
6814         {
6815             add
6816             {
6817                 base.StyleChanged += value;
6818             }
6819             remove
6820             {
6821                 base.StyleChanged -= value;
6822             }
6823         }
6824
6825         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.UserAddedRow"]/*‘ />
6826         [
6827             SRCategory(SR.CatAction),
6828             SRDescription(SR.DataGridView_UserAddedRowDescr)
6829         ]
6830         public event DataGridViewRowEventHandler UserAddedRow
6831         {
6832             add
6833             {
6834                 this.Events.AddHandler(EVENT_DATAGRIDVIEWUSERADDEDROW, value);
6835             }
6836             remove
6837             {
6838                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWUSERADDEDROW, value);
6839             }
6840         }
6841
6842         /*/// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.UserAddingRow"]/*‘ />
6843         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.UserAddingRow"]/*‘ />
6844         public event DataGridViewRowCancelEventHandler UserAddingRow
6845         {
6846             add
6847             {
6848                 this.Events.AddHandler(EVENT_DATAGRIDVIEWUSERADDINGROW, value);
6849             }
6850             remove
6851             {
6852                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWUSERADDINGROW, value);
6853             }
6854         }*/
6855
6856         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.UserDeletedRow"]/*‘ />
6857         [
6858             SRCategory(SR.CatAction),
6859             SRDescription(SR.DataGridView_UserDeletedRowDescr)
6860         ]
6861         public event DataGridViewRowEventHandler UserDeletedRow
6862         {
6863             add
6864             {
6865                 this.Events.AddHandler(EVENT_DATAGRIDVIEWUSERDELETEDROW, value);
6866             }
6867             remove
6868             {
6869                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWUSERDELETEDROW, value);
6870             }
6871         }
6872
6873         /// <include file=‘doc\DataGridView.uex‘ path=‘docs/doc[@for="DataGridView.UserDeletingRow"]/*‘ />
6874         [
6875             SRCategory(SR.CatAction),
6876             SRDescription(SR.DataGridView_UserDeletingRowDescr)
6877         ]
6878         public event DataGridViewRowCancelEventHandler UserDeletingRow
6879         {
6880             add
6881             {
6882                 this.Events.AddHandler(EVENT_DATAGRIDVIEWUSERDELETINGROW, value);
6883             }
6884             remove
6885             {
6886                 this.Events.RemoveHandler(EVENT_DATAGRIDVIEWUSERDELETINGROW, value);
6887             }
6888         }
6889
6890         ////////////////////////
6891         //                    //
6892         // ISupportInitialize //
6893         //                    //
6894         ////////////////////////
6895         [
6896             SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes") // VSWhidbey 405004
6897         ]
6898         void ISupportInitialize.BeginInit()
6899         {
6900             if (this.dataGridViewState2[DATAGRIDVIEWSTATE2_initializing])
6901             {
6902                 throw new InvalidOperationException(SR.GetString(SR.DataGridViewBeginInit));
6903             }
6904
6905             this.dataGridViewState2[DATAGRIDVIEWSTATE2_initializing] = true;
6906         }
6907
6908         [
6909             SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes") // VSWhidbey 405004
6910         ]
6911         void ISupportInitialize.EndInit()
6912         {
6913             this.dataGridViewState2[DATAGRIDVIEWSTATE2_initializing] = false;
6914
6915             foreach (DataGridViewColumn dataGridViewColumn in this.Columns)
6916             {
6917                 if (dataGridViewColumn.Frozen &&
6918                     dataGridViewColumn.Visible &&
6919                     dataGridViewColumn.InheritedAutoSizeMode == DataGridViewAutoSizeColumnMode.Fill)
6920                 {
6921                     dataGridViewColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
6922                 }
6923             }
6924
6925             DataGridViewSelectionMode selectionMode = this.SelectionMode;
6926             if (selectionMode == DataGridViewSelectionMode.FullColumnSelect || selectionMode == DataGridViewSelectionMode.ColumnHeaderSelect)
6927             {
6928                 foreach (DataGridViewColumn dataGridViewColumn in this.Columns)
6929                 {
6930                     if (dataGridViewColumn.SortMode == DataGridViewColumnSortMode.Automatic)
6931                     {
6932                         // Resetting SelectionMode to its acceptable default value. We don‘t want the control to ever end up in an invalid state.
6933                         this.SelectionMode = defaultSelectionMode; // DataGridViewSelectionMode.RowHeaderSelect
6934                         throw new InvalidOperationException(SR.GetString(SR.DataGridView_SelectionModeReset,
6935                                                                          SR.GetString(SR.DataGridView_SelectionModeAndSortModeClash, (selectionMode).ToString()),
6936                                                                          (defaultSelectionMode).ToString()));
6937                     }
6938                 }
6939             }
6940         }
6941
6942         /* INTERNAL ENUMERATIONS */
6943
6944         internal enum DataGridViewHitTestTypeInternal
6945         {
6946             None,
6947             Cell,
6948             ColumnHeader,
6949             RowHeader,
6950             ColumnResizeLeft,
6951             ColumnResizeRight,
6952             RowResizeTop,
6953             RowResizeBottom,
6954             FirstColumnHeaderLeft,
6955             TopLeftHeader,
6956             TopLeftHeaderResizeLeft,
6957             TopLeftHeaderResizeRight,
6958             TopLeftHeaderResizeTop,
6959             TopLeftHeaderResizeBottom,
6960             ColumnHeadersResizeBottom,
6961             ColumnHeadersResizeTop,
6962             RowHeadersResizeRight,
6963             RowHeadersResizeLeft,
6964             ColumnHeaderLeft,
6965             ColumnHeaderRight
6966         }
6967
6968         internal enum DataGridViewValidateCellInternal
6969         {
6970             Never,
6971             Always,
6972             WhenChanged
6973         }
6974
6975         private enum DataGridViewMouseEvent
6976         {
6977             Click,
6978             DoubleClick,
6979             MouseClick,
6980             MouseDoubleClick,
6981             MouseDown,
6982             MouseUp,
6983             MouseMove
6984         }
6985
6986         private struct MouseClickInfo
6987         {
6988             public MouseButtons button;
6989             public long timeStamp;
6990             public int x;
6991             public int y;
6992             public int col;
6993             public int row;
6994         }
6995     }
6996 }
6997 Document OutlineProject ExplorerNamespace Explorer

时间: 2024-08-06 03:45:23

System.Windows.Forms的相关文章

System.Diagnostic.Process.Start vs System.Windows.Forms.Help.ShowHelp 打开CHM文件

CHM文件,Microsoft Compiled HTML Help,即"已编辑的帮助文件",包含一系列的HTML文件,index文件和其它的导航工具,经常作为产品的帮助文件[1]. 在.Net程序中,打开这种文件最简单的方式就是调用System.Windows.Forms.Help.ShowHelp()方法.根据MSDN,重载了四种调用方式[2].Control为父控件,string为Help文件的URL,HelpNavigator是一个枚举类型,可以采用Index或者Topic或者

System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的差别和分别什么时候用

一.System.Windows.Forms.Timer 1.基于Windows消息循环,用事件方式触发,在界面线程执行:是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事件上的EvnetHandler.在这种Timer的EventHandler中可 以直接获取和修改UI元素而不会出现问题--因为这种Timer实际上就是在UI线程自身上进行调用的. 2.它是一个基于Form的计时器3.创建之后,你可以使用Interval设置Tick之间的跨

错误 128 无法将类型“string”隐式转换为“System.Windows.Forms.DataGridViewTextBoxColumn”

原因是DataGridView中列的Name属性值和DataPropertyName属性值一样,比如Name="CardID",DataPropertyName="CardID",这样会出现 :错误 128 无法将类型"string"隐式转换为"System.Windows.Forms.DataGridViewTextBoxColumn"

System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....

#region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll #endregion using System.Collections; using System.ComponentModel; using Syst

System.Windows.Forms.ListView : Control

#region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll #endregion using System.Collections; using System.ComponentModel; using Syst

WPF 添加ACTIVEX 控件 ——System.Windows.Forms.AxHost+InvalidActiveXStateException异常

---恢复内容开始--- 一.ACTIVEX及其相关概念 COM(Component Object Model,对象组件模型): DCOM(Distributed COM,分布式对象组件模型): CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构): 动态数据交换(Dynamic Data Exchange,DDE),解决了数据的更新,但数据格式仍是问题: 对象的链接与嵌入(Object Linking and Embedde

System.Windows.Forms.Timer反编译学习

1 using System; 2 using System.ComponentModel; 3 using System.Globalization; 4 using System.Runtime; 5 using System.Runtime.InteropServices; 6 using System.Threading; 7 namespace System.Windows.Forms 8 { 9 [DefaultEvent("Tick"), DefaultProperty(

【Winform】 无法将类型为“System.Windows.Forms.SplitContainer”的对象强制转换为类型“System.ComponentModel.ISupportInitialize”。

问题:将dotnet framework 4.0 切换到2.0时,编译没有问题,在运行时出现如下错误:System.InvalidCastException: 无法将类型为“System.Windows.Forms.SplitContainer”的对象强制转换为类型“System.ComponentModel.ISupportInitialize”. 解决方法: 注释掉如下代码(此代码为设计器自动生成代码) //((System.ComponentModel.ISupportInitialize

System.Windows.Forms.WebBrowser中 处理 js 脚本 window.Open 禁止新建窗口 的方法

wb 是 拖放在窗体上的 System.Windows.Forms.WebBrowser 在你的窗体代码中定义 SHDocVw.WebBrowser_V1 wb1; 在 你窗体的 load 事件中 加入下面的代码 wb1 = wb.ActiveXInstance as SHDocVw.WebBrowser_V1; wb1.NewWindow += wb1_NewWindow; 处理事件: void wb1_NewWindow(string URL, int Flags, string Targe