Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / WinForms / Managed / System / WinForms / DataGridState.cs / 1 / DataGridState.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System.Diagnostics;
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;
using Microsoft.Win32;
using System.Security.Permissions;
///
///
/// Encapsulates the state of a DataGrid that changes when the
/// user navigates back and forth through ADO.NET data relations.
///
internal sealed class DataGridState : ICloneable {
// fields
//
public object DataSource = null;
public string DataMember = null;
public CurrencyManager ListManager = null;
public DataGridRow[] DataGridRows = new DataGridRow[0];
public DataGrid DataGrid;
public int DataGridRowsLength = 0;
public GridColumnStylesCollection GridColumnStyles = null;
public int FirstVisibleRow = 0;
public int FirstVisibleCol = 0;
public int CurrentRow = 0;
public int CurrentCol = 0;
public DataGridRow LinkingRow = null;
AccessibleObject parentRowAccessibleObject;
public DataGridState() {
}
public DataGridState(DataGrid dataGrid) {
PushState(dataGrid);
}
internal AccessibleObject ParentRowAccessibleObject {
get {
if (parentRowAccessibleObject == null) {
parentRowAccessibleObject = new DataGridStateParentRowAccessibleObject(this);
}
return parentRowAccessibleObject;
}
}
// methods
//
public object Clone() {
DataGridState dgs = new DataGridState();
dgs.DataGridRows = DataGridRows;
dgs.DataSource = DataSource;
dgs.DataMember = DataMember;
dgs.FirstVisibleRow = FirstVisibleRow;
dgs.FirstVisibleCol = FirstVisibleCol;
dgs.CurrentRow = CurrentRow;
dgs.CurrentCol = CurrentCol;
dgs.GridColumnStyles = GridColumnStyles;
dgs.ListManager = ListManager;
dgs.DataGrid = DataGrid;
return dgs;
}
///
///
/// Called by a DataGrid when it wishes to preserve its
/// transient state in the current DataGridState object.
///
public void PushState(DataGrid dataGrid) {
this.DataSource = dataGrid.DataSource;
this.DataMember = dataGrid.DataMember;
this.DataGrid = dataGrid;
this.DataGridRows = dataGrid.DataGridRows;
this.DataGridRowsLength = dataGrid.DataGridRowsLength;
this.FirstVisibleRow = dataGrid.firstVisibleRow;
this.FirstVisibleCol = dataGrid.firstVisibleCol;
this.CurrentRow = dataGrid.currentRow;
this.GridColumnStyles = new GridColumnStylesCollection(dataGrid.myGridTable);
this.GridColumnStyles.Clear();
foreach(DataGridColumnStyle style in dataGrid.myGridTable.GridColumnStyles) {
this.GridColumnStyles.Add(style);
}
this.ListManager = dataGrid.ListManager;
this.ListManager.ItemChanged += new ItemChangedEventHandler(DataSource_Changed);
this.ListManager.MetaDataChanged += new EventHandler(DataSource_MetaDataChanged);
this.CurrentCol = dataGrid.currentCol;
}
// this is needed so that the parent rows will remove notification from the list
// when the datagridstate is no longer needed;
public void RemoveChangeNotification() {
this.ListManager.ItemChanged -= new ItemChangedEventHandler(DataSource_Changed);
this.ListManager.MetaDataChanged -= new EventHandler(DataSource_MetaDataChanged);
}
///
///
/// Called by a grid when it wishes to match its transient
/// state with the current DataGridState object.
///
public void PullState(DataGrid dataGrid, bool createColumn) {
// dataGrid.DataSource = DataSource;
// dataGrid.DataMember = DataMember;
dataGrid.Set_ListManager(DataSource, DataMember, true, createColumn); // true for forcing new listManager,
/*
if (DataSource.Table.ParentRelations.Count > 0)
dataGrid.PopulateColumns();
*/
dataGrid.firstVisibleRow = FirstVisibleRow;
dataGrid.firstVisibleCol = FirstVisibleCol;
dataGrid.currentRow = CurrentRow;
dataGrid.currentCol = CurrentCol;
dataGrid.SetDataGridRows(DataGridRows, DataGridRowsLength);
}
private void DataSource_Changed(object sender, ItemChangedEventArgs e) {
if (this.DataGrid != null && this.ListManager.Position == e.Index) {
DataGrid.InvalidateParentRows();
return;
}
if (this.DataGrid != null)
DataGrid.ParentRowsDataChanged();
}
private void DataSource_MetaDataChanged(object sender, EventArgs e) {
if (this.DataGrid != null)
DataGrid.ParentRowsDataChanged();
}
[ComVisible(true)]
internal class DataGridStateParentRowAccessibleObject : AccessibleObject {
DataGridState owner = null;
public DataGridStateParentRowAccessibleObject(DataGridState owner) : base() {
Debug.Assert(owner != null, "DataGridRowAccessibleObject must have a valid owner DataGridRow");
this.owner = owner;
}
public override Rectangle Bounds {
get {
DataGridParentRows dataGridParentRows = ((DataGridParentRows.DataGridParentRowsAccessibleObject)this.Parent).Owner;
DataGrid g = owner.LinkingRow.DataGrid;
Rectangle r = dataGridParentRows.GetBoundsForDataGridStateAccesibility(owner);
r.Y += g.ParentRowsBounds.Y;
return g.RectangleToScreen(r);
}
}
public override string Name {
get {
return SR.GetString(SR.AccDGParentRow);
}
}
public override AccessibleObject Parent {
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
get {
return owner.LinkingRow.DataGrid.ParentRowsAccessibleObject;
}
}
public override AccessibleRole Role {
get {
return AccessibleRole.ListItem;
}
}
public override string Value {
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
get {
StringBuilder sb = new StringBuilder();
CurrencyManager source = (CurrencyManager)owner.LinkingRow.DataGrid.BindingContext[owner.DataSource, owner.DataMember];
sb.Append(owner.ListManager.GetListName());
sb.Append(": ");
bool needComma = false;
foreach (DataGridColumnStyle col in owner.GridColumnStyles) {
if (needComma) {
sb.Append(", ");
}
string colName = col.HeaderText;
string cellValue = col.PropertyDescriptor.Converter.ConvertToString(col.PropertyDescriptor.GetValue(source.Current));
sb.Append(colName);
sb.Append(": ");
sb.Append(cellValue);
needComma = true;
}
return sb.ToString();
}
}
///
///
/// Navigate to the next or previous grid entry.
///
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public override AccessibleObject Navigate(AccessibleNavigation navdir) {
DataGridParentRows.DataGridParentRowsAccessibleObject parentAcc = (DataGridParentRows.DataGridParentRowsAccessibleObject)Parent;
switch (navdir) {
case AccessibleNavigation.Down:
case AccessibleNavigation.Right:
case AccessibleNavigation.Next:
return parentAcc.GetNext(this);
case AccessibleNavigation.Up:
case AccessibleNavigation.Left:
case AccessibleNavigation.Previous:
return parentAcc.GetPrev(this);
}
return null;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System.Diagnostics;
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;
using Microsoft.Win32;
using System.Security.Permissions;
///
///
/// Encapsulates the state of a DataGrid that changes when the
/// user navigates back and forth through ADO.NET data relations.
///
internal sealed class DataGridState : ICloneable {
// fields
//
public object DataSource = null;
public string DataMember = null;
public CurrencyManager ListManager = null;
public DataGridRow[] DataGridRows = new DataGridRow[0];
public DataGrid DataGrid;
public int DataGridRowsLength = 0;
public GridColumnStylesCollection GridColumnStyles = null;
public int FirstVisibleRow = 0;
public int FirstVisibleCol = 0;
public int CurrentRow = 0;
public int CurrentCol = 0;
public DataGridRow LinkingRow = null;
AccessibleObject parentRowAccessibleObject;
public DataGridState() {
}
public DataGridState(DataGrid dataGrid) {
PushState(dataGrid);
}
internal AccessibleObject ParentRowAccessibleObject {
get {
if (parentRowAccessibleObject == null) {
parentRowAccessibleObject = new DataGridStateParentRowAccessibleObject(this);
}
return parentRowAccessibleObject;
}
}
// methods
//
public object Clone() {
DataGridState dgs = new DataGridState();
dgs.DataGridRows = DataGridRows;
dgs.DataSource = DataSource;
dgs.DataMember = DataMember;
dgs.FirstVisibleRow = FirstVisibleRow;
dgs.FirstVisibleCol = FirstVisibleCol;
dgs.CurrentRow = CurrentRow;
dgs.CurrentCol = CurrentCol;
dgs.GridColumnStyles = GridColumnStyles;
dgs.ListManager = ListManager;
dgs.DataGrid = DataGrid;
return dgs;
}
///
///
/// Called by a DataGrid when it wishes to preserve its
/// transient state in the current DataGridState object.
///
public void PushState(DataGrid dataGrid) {
this.DataSource = dataGrid.DataSource;
this.DataMember = dataGrid.DataMember;
this.DataGrid = dataGrid;
this.DataGridRows = dataGrid.DataGridRows;
this.DataGridRowsLength = dataGrid.DataGridRowsLength;
this.FirstVisibleRow = dataGrid.firstVisibleRow;
this.FirstVisibleCol = dataGrid.firstVisibleCol;
this.CurrentRow = dataGrid.currentRow;
this.GridColumnStyles = new GridColumnStylesCollection(dataGrid.myGridTable);
this.GridColumnStyles.Clear();
foreach(DataGridColumnStyle style in dataGrid.myGridTable.GridColumnStyles) {
this.GridColumnStyles.Add(style);
}
this.ListManager = dataGrid.ListManager;
this.ListManager.ItemChanged += new ItemChangedEventHandler(DataSource_Changed);
this.ListManager.MetaDataChanged += new EventHandler(DataSource_MetaDataChanged);
this.CurrentCol = dataGrid.currentCol;
}
// this is needed so that the parent rows will remove notification from the list
// when the datagridstate is no longer needed;
public void RemoveChangeNotification() {
this.ListManager.ItemChanged -= new ItemChangedEventHandler(DataSource_Changed);
this.ListManager.MetaDataChanged -= new EventHandler(DataSource_MetaDataChanged);
}
///
///
/// Called by a grid when it wishes to match its transient
/// state with the current DataGridState object.
///
public void PullState(DataGrid dataGrid, bool createColumn) {
// dataGrid.DataSource = DataSource;
// dataGrid.DataMember = DataMember;
dataGrid.Set_ListManager(DataSource, DataMember, true, createColumn); // true for forcing new listManager,
/*
if (DataSource.Table.ParentRelations.Count > 0)
dataGrid.PopulateColumns();
*/
dataGrid.firstVisibleRow = FirstVisibleRow;
dataGrid.firstVisibleCol = FirstVisibleCol;
dataGrid.currentRow = CurrentRow;
dataGrid.currentCol = CurrentCol;
dataGrid.SetDataGridRows(DataGridRows, DataGridRowsLength);
}
private void DataSource_Changed(object sender, ItemChangedEventArgs e) {
if (this.DataGrid != null && this.ListManager.Position == e.Index) {
DataGrid.InvalidateParentRows();
return;
}
if (this.DataGrid != null)
DataGrid.ParentRowsDataChanged();
}
private void DataSource_MetaDataChanged(object sender, EventArgs e) {
if (this.DataGrid != null)
DataGrid.ParentRowsDataChanged();
}
[ComVisible(true)]
internal class DataGridStateParentRowAccessibleObject : AccessibleObject {
DataGridState owner = null;
public DataGridStateParentRowAccessibleObject(DataGridState owner) : base() {
Debug.Assert(owner != null, "DataGridRowAccessibleObject must have a valid owner DataGridRow");
this.owner = owner;
}
public override Rectangle Bounds {
get {
DataGridParentRows dataGridParentRows = ((DataGridParentRows.DataGridParentRowsAccessibleObject)this.Parent).Owner;
DataGrid g = owner.LinkingRow.DataGrid;
Rectangle r = dataGridParentRows.GetBoundsForDataGridStateAccesibility(owner);
r.Y += g.ParentRowsBounds.Y;
return g.RectangleToScreen(r);
}
}
public override string Name {
get {
return SR.GetString(SR.AccDGParentRow);
}
}
public override AccessibleObject Parent {
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
get {
return owner.LinkingRow.DataGrid.ParentRowsAccessibleObject;
}
}
public override AccessibleRole Role {
get {
return AccessibleRole.ListItem;
}
}
public override string Value {
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
get {
StringBuilder sb = new StringBuilder();
CurrencyManager source = (CurrencyManager)owner.LinkingRow.DataGrid.BindingContext[owner.DataSource, owner.DataMember];
sb.Append(owner.ListManager.GetListName());
sb.Append(": ");
bool needComma = false;
foreach (DataGridColumnStyle col in owner.GridColumnStyles) {
if (needComma) {
sb.Append(", ");
}
string colName = col.HeaderText;
string cellValue = col.PropertyDescriptor.Converter.ConvertToString(col.PropertyDescriptor.GetValue(source.Current));
sb.Append(colName);
sb.Append(": ");
sb.Append(cellValue);
needComma = true;
}
return sb.ToString();
}
}
///
///
/// Navigate to the next or previous grid entry.
///
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public override AccessibleObject Navigate(AccessibleNavigation navdir) {
DataGridParentRows.DataGridParentRowsAccessibleObject parentAcc = (DataGridParentRows.DataGridParentRowsAccessibleObject)Parent;
switch (navdir) {
case AccessibleNavigation.Down:
case AccessibleNavigation.Right:
case AccessibleNavigation.Next:
return parentAcc.GetNext(this);
case AccessibleNavigation.Up:
case AccessibleNavigation.Left:
case AccessibleNavigation.Previous:
return parentAcc.GetPrev(this);
}
return null;
}
}
}
}
// 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
- OdbcConnectionOpen.cs
- CompilationSection.cs
- MessagingDescriptionAttribute.cs
- WSFederationHttpBinding.cs
- Literal.cs
- Internal.cs
- NamespaceEmitter.cs
- SiteMapDataSource.cs
- WorkflowOperationErrorHandler.cs
- StateDesigner.TransitionInfo.cs
- Bidi.cs
- ConfigsHelper.cs
- InternalMappingException.cs
- RequestCachingSection.cs
- Brush.cs
- ComplexObject.cs
- FontStretches.cs
- ModelMemberCollection.cs
- ConnectionOrientedTransportElement.cs
- WindowsGraphicsCacheManager.cs
- ImpersonationContext.cs
- TagNameToTypeMapper.cs
- DbDeleteCommandTree.cs
- UpdatableGenericsFeature.cs
- TreeChangeInfo.cs
- ProtectedConfigurationSection.cs
- XmlSchemaChoice.cs
- ApplicationDirectoryMembershipCondition.cs
- CreateUserWizard.cs
- MetadataPropertyAttribute.cs
- DataGridViewCellCancelEventArgs.cs
- webbrowsersite.cs
- HtmlImage.cs
- ParameterCollection.cs
- AuthenticateEventArgs.cs
- X509AsymmetricSecurityKey.cs
- TemplateComponentConnector.cs
- AddingNewEventArgs.cs
- ListViewHitTestInfo.cs
- PagePropertiesChangingEventArgs.cs
- BoolExpr.cs
- COM2ColorConverter.cs
- CatalogPartDesigner.cs
- ViewStateModeByIdAttribute.cs
- WebBrowser.cs
- SmiSettersStream.cs
- EntityDataSourceChangingEventArgs.cs
- DataBoundControlAdapter.cs
- RtfFormatStack.cs
- ListControl.cs
- CompatibleComparer.cs
- TextureBrush.cs
- OleDbSchemaGuid.cs
- CharacterBuffer.cs
- Action.cs
- TypeConverterHelper.cs
- AutomationIdentifierGuids.cs
- EventLogPermissionHolder.cs
- CanExecuteRoutedEventArgs.cs
- CmsInterop.cs
- PersianCalendar.cs
- PanelStyle.cs
- CSharpCodeProvider.cs
- RangeExpression.cs
- ADMembershipUser.cs
- TabControl.cs
- SafeNativeMethods.cs
- Guid.cs
- XmlNotation.cs
- MouseButton.cs
- IODescriptionAttribute.cs
- AdditionalEntityFunctions.cs
- Knowncolors.cs
- LinkLabelLinkClickedEvent.cs
- WorkflowInstanceAbortedRecord.cs
- SplashScreenNativeMethods.cs
- LocatorGroup.cs
- BaseDataBoundControl.cs
- ScrollEvent.cs
- ImageIndexConverter.cs
- UnsafeNativeMethods.cs
- ValueSerializerAttribute.cs
- WebPartManagerInternals.cs
- PointConverter.cs
- NamespaceTable.cs
- BlurEffect.cs
- DesignerActionVerbList.cs
- Encoding.cs
- EncodingInfo.cs
- SortQueryOperator.cs
- IPipelineRuntime.cs
- ProcessThread.cs
- DataGridViewColumnConverter.cs
- DataGridPagingPage.cs
- HttpPostedFile.cs
- TypefaceMap.cs
- RawStylusInput.cs
- NamedObject.cs
- DataTableTypeConverter.cs
- DataGridViewButtonCell.cs