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