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