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

你可能感兴趣的:(windows)