Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / DataGridViewCellLinkedList.cs / 1305376 / DataGridViewCellLinkedList.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms
{
using System;
using System.Diagnostics;
using System.Collections;
using System.Windows.Forms;
using System.ComponentModel;
///
///
/// Represents a linked list of objects
///
internal class DataGridViewCellLinkedList : IEnumerable
{
private DataGridViewCellLinkedListElement lastAccessedElement;
private DataGridViewCellLinkedListElement headElement;
private int count, lastAccessedIndex;
///
IEnumerator IEnumerable.GetEnumerator()
{
return new DataGridViewCellLinkedListEnumerator(this.headElement);
}
///
public DataGridViewCellLinkedList()
{
this.lastAccessedIndex = -1;
}
///
public DataGridViewCell this[int index]
{
get
{
Debug.Assert(index >= 0);
Debug.Assert(index < this.count);
if (this.lastAccessedIndex == -1 || index < this.lastAccessedIndex)
{
DataGridViewCellLinkedListElement tmp = this.headElement;
int tmpIndex = index;
while (tmpIndex > 0)
{
tmp = tmp.Next;
tmpIndex--;
}
this.lastAccessedElement = tmp;
this.lastAccessedIndex = index;
return tmp.DataGridViewCell;
}
else
{
while (this.lastAccessedIndex < index)
{
this.lastAccessedElement = this.lastAccessedElement.Next;
this.lastAccessedIndex++;
}
return this.lastAccessedElement.DataGridViewCell;
}
}
}
///
public int Count
{
get
{
return this.count;
}
}
///
public DataGridViewCell HeadCell
{
get
{
Debug.Assert(this.headElement != null);
return this.headElement.DataGridViewCell;
}
}
///
public void Add(DataGridViewCell dataGridViewCell)
{
Debug.Assert(dataGridViewCell != null);
Debug.Assert(dataGridViewCell.DataGridView.SelectionMode == DataGridViewSelectionMode.CellSelect ||
dataGridViewCell.DataGridView.SelectionMode == DataGridViewSelectionMode.ColumnHeaderSelect ||
dataGridViewCell.DataGridView.SelectionMode == DataGridViewSelectionMode.RowHeaderSelect);
DataGridViewCellLinkedListElement newHead = new DataGridViewCellLinkedListElement(dataGridViewCell);
if (this.headElement != null)
{
newHead.Next = this.headElement;
}
this.headElement = newHead;
this.count++;
this.lastAccessedElement = null;
this.lastAccessedIndex = -1;
}
///
public void Clear()
{
this.lastAccessedElement = null;
this.lastAccessedIndex = -1;
this.headElement = null;
this.count = 0;
}
///
public bool Contains(DataGridViewCell dataGridViewCell)
{
Debug.Assert(dataGridViewCell != null);
int index = 0;
DataGridViewCellLinkedListElement tmp = this.headElement;
while (tmp != null)
{
if (tmp.DataGridViewCell == dataGridViewCell)
{
this.lastAccessedElement = tmp;
this.lastAccessedIndex = index;
return true;
}
tmp = tmp.Next;
index++;
}
return false;
}
///
public bool Remove(DataGridViewCell dataGridViewCell)
{
Debug.Assert(dataGridViewCell != null);
DataGridViewCellLinkedListElement tmp1 = null, tmp2 = this.headElement;
while (tmp2 != null)
{
if (tmp2.DataGridViewCell == dataGridViewCell)
{
break;
}
tmp1 = tmp2;
tmp2 = tmp2.Next;
}
if (tmp2.DataGridViewCell == dataGridViewCell)
{
DataGridViewCellLinkedListElement tmp3 = tmp2.Next;
if (tmp1 == null)
{
this.headElement = tmp3;
}
else
{
tmp1.Next = tmp3;
}
this.count--;
this.lastAccessedElement = null;
this.lastAccessedIndex = -1;
return true;
}
return false;
}
/* Unused for now
///
public DataGridViewCell RemoveHead()
{
if (this.headElement == null)
{
return null;
}
DataGridViewCellLinkedListElement tmp = this.headElement;
this.headElement = tmp.Next;
this.count--;
this.lastAccessedElement = null;
this.lastAccessedIndex = -1;
return tmp.DataGridViewCell;
}
*/
///
public int RemoveAllCellsAtBand(bool column, int bandIndex)
{
int removedCount = 0;
DataGridViewCellLinkedListElement tmp1 = null, tmp2 = this.headElement;
while (tmp2 != null)
{
if ((column && tmp2.DataGridViewCell.ColumnIndex == bandIndex) ||
(!column && tmp2.DataGridViewCell.RowIndex == bandIndex))
{
DataGridViewCellLinkedListElement tmp3 = tmp2.Next;
if (tmp1 == null)
{
this.headElement = tmp3;
}
else
{
tmp1.Next = tmp3;
}
tmp2 = tmp3;
this.count--;
this.lastAccessedElement = null;
this.lastAccessedIndex = -1;
removedCount++;
}
else
{
tmp1 = tmp2;
tmp2 = tmp2.Next;
}
}
return removedCount;
}
}
///
///
/// Represents an emunerator of elements in a linked list.
///
internal class DataGridViewCellLinkedListEnumerator : IEnumerator
{
private DataGridViewCellLinkedListElement headElement;
private DataGridViewCellLinkedListElement current;
private bool reset;
///
public DataGridViewCellLinkedListEnumerator(DataGridViewCellLinkedListElement headElement)
{
this.headElement = headElement;
this.reset = true;
}
///
object IEnumerator.Current
{
get
{
Debug.Assert(this.current != null); // Since this is for internal use only.
return this.current.DataGridViewCell;
}
}
///
bool IEnumerator.MoveNext()
{
if (this.reset)
{
Debug.Assert(this.current == null);
this.current = this.headElement;
this.reset = false;
}
else
{
Debug.Assert(this.current != null); // Since this is for internal use only.
this.current = this.current.Next;
}
return (this.current != null);
}
///
void IEnumerator.Reset()
{
this.reset = true;
this.current = null;
}
}
///
///
/// Represents an element in a linked list.
///
internal class DataGridViewCellLinkedListElement
{
private DataGridViewCell dataGridViewCell;
private DataGridViewCellLinkedListElement next;
///
public DataGridViewCellLinkedListElement(DataGridViewCell dataGridViewCell)
{
Debug.Assert(dataGridViewCell != null);
this.dataGridViewCell = dataGridViewCell;
}
///
public DataGridViewCell DataGridViewCell
{
get
{
return this.dataGridViewCell;
}
}
///
public DataGridViewCellLinkedListElement Next
{
get
{
return this.next;
}
set
{
this.next = value;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MobileUITypeEditor.cs
- DynamicPropertyHolder.cs
- RouteItem.cs
- TypeUtils.cs
- Substitution.cs
- Knowncolors.cs
- Mutex.cs
- SplitterCancelEvent.cs
- FrameworkElementFactoryMarkupObject.cs
- MenuStrip.cs
- InkSerializer.cs
- RuleValidation.cs
- DBSchemaTable.cs
- UnsafeNativeMethods.cs
- ObjectItemConventionAssemblyLoader.cs
- TypeInformation.cs
- TextProperties.cs
- SchemaImporterExtension.cs
- Dictionary.cs
- ColumnMapProcessor.cs
- ExpressionsCollectionConverter.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- SelectedCellsChangedEventArgs.cs
- FlowDocumentPaginator.cs
- LinearKeyFrames.cs
- IOException.cs
- WindowProviderWrapper.cs
- DefaultCommandExtensionCallback.cs
- ISFTagAndGuidCache.cs
- RequestCacheEntry.cs
- MsmqIntegrationSecurityElement.cs
- ByteKeyFrameCollection.cs
- FigureParagraph.cs
- ExecutedRoutedEventArgs.cs
- EncoderNLS.cs
- SqlTypeConverter.cs
- Page.cs
- CircleHotSpot.cs
- ZipFileInfo.cs
- StringArrayConverter.cs
- SoapIgnoreAttribute.cs
- ValidatorCompatibilityHelper.cs
- PartialCachingAttribute.cs
- FacetDescriptionElement.cs
- SqlClientPermission.cs
- HTMLTextWriter.cs
- LazyTextWriterCreator.cs
- HotSpotCollection.cs
- DispatcherExceptionFilterEventArgs.cs
- CodeVariableDeclarationStatement.cs
- EventListenerClientSide.cs
- XsltOutput.cs
- EntityType.cs
- HashHelpers.cs
- StoragePropertyMapping.cs
- ResourcesBuildProvider.cs
- TextStore.cs
- DoubleLink.cs
- CodeSnippetStatement.cs
- UnsafeNetInfoNativeMethods.cs
- CommunicationObject.cs
- BitmapPalettes.cs
- MachineKeyConverter.cs
- URI.cs
- TypeFieldSchema.cs
- Style.cs
- PropertyBuilder.cs
- QueryHandler.cs
- EditorPartDesigner.cs
- KeyValueConfigurationCollection.cs
- StringFunctions.cs
- RichTextBox.cs
- RSACryptoServiceProvider.cs
- DataSourceXmlSerializationAttribute.cs
- ToolBarPanel.cs
- CustomWebEventKey.cs
- ResourceProviderFactory.cs
- FunctionDetailsReader.cs
- WorkflowServiceBuildProvider.cs
- CurrencyWrapper.cs
- AutoResizedEvent.cs
- ImpersonateTokenRef.cs
- MetadataItemCollectionFactory.cs
- ToolBarButtonClickEvent.cs
- PointCollectionValueSerializer.cs
- ProjectionPathSegment.cs
- SymmetricAlgorithm.cs
- ClassDataContract.cs
- ImageSource.cs
- DBCommandBuilder.cs
- ConvertersCollection.cs
- UserControlParser.cs
- UIElementAutomationPeer.cs
- DecoderFallbackWithFailureFlag.cs
- ApplicationFileCodeDomTreeGenerator.cs
- AppearanceEditorPart.cs
- ObjectViewEntityCollectionData.cs
- ReadContentAsBinaryHelper.cs
- GridToolTip.cs
- XmlBoundElement.cs