Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / WinForms / Managed / System / WinForms / DataGridViewAdvancedBorderStyle.cs / 1 / DataGridViewAdvancedBorderStyle.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System; using System.Diagnostics; using System.ComponentModel; ///public sealed class DataGridViewAdvancedBorderStyle : ICloneable { private DataGridView owner; private bool all = true; private DataGridViewAdvancedCellBorderStyle banned1, banned2, banned3; private DataGridViewAdvancedCellBorderStyle top = DataGridViewAdvancedCellBorderStyle.None; private DataGridViewAdvancedCellBorderStyle left = DataGridViewAdvancedCellBorderStyle.None; private DataGridViewAdvancedCellBorderStyle right = DataGridViewAdvancedCellBorderStyle.None; private DataGridViewAdvancedCellBorderStyle bottom = DataGridViewAdvancedCellBorderStyle.None; /// public DataGridViewAdvancedBorderStyle() : this(null, DataGridViewAdvancedCellBorderStyle.NotSet, DataGridViewAdvancedCellBorderStyle.NotSet, DataGridViewAdvancedCellBorderStyle.NotSet) { } internal DataGridViewAdvancedBorderStyle(DataGridView owner) : this(owner, DataGridViewAdvancedCellBorderStyle.NotSet, DataGridViewAdvancedCellBorderStyle.NotSet, DataGridViewAdvancedCellBorderStyle.NotSet) { } /// /// Creates a new DataGridViewAdvancedBorderStyle. The specified owner will /// be notified when the values are changed. /// internal DataGridViewAdvancedBorderStyle(DataGridView owner, DataGridViewAdvancedCellBorderStyle banned1, DataGridViewAdvancedCellBorderStyle banned2, DataGridViewAdvancedCellBorderStyle banned3) { this.owner = owner; this.banned1 = banned1; this.banned2 = banned2; this.banned3 = banned3; } ///public DataGridViewAdvancedCellBorderStyle All { get { return this.all ? this.top : DataGridViewAdvancedCellBorderStyle.NotSet; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet || value == this.banned1 || value == this.banned2 || value == this.banned3) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "All")); } if (!this.all || this.top != value) { this.all = true; this.top = this.left = this.right = this.bottom = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// public DataGridViewAdvancedCellBorderStyle Bottom { get { if (this.all) { return this.top; } return this.bottom; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Bottom")); } this.BottomInternal = value; } } internal DataGridViewAdvancedCellBorderStyle BottomInternal { set { //Debug.Assert(Enum.IsDefined(typeof(DataGridViewAdvancedCellBorderStyle), value)); //Debug.Assert(value != DataGridViewAdvancedCellBorderStyle.NotSet); if ((this.all && this.top != value) || (!this.all && this.bottom != value)) { if (this.all) { if (this.right == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.right = DataGridViewAdvancedCellBorderStyle.Outset; } } this.all = false; this.bottom = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// public DataGridViewAdvancedCellBorderStyle Left { get { if (this.all) { return this.top; } return this.left; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Left")); } this.LeftInternal = value; } } internal DataGridViewAdvancedCellBorderStyle LeftInternal { set { //Debug.Assert(Enum.IsDefined(typeof(DataGridViewAdvancedCellBorderStyle), value)); //Debug.Assert(value != DataGridViewAdvancedCellBorderStyle.NotSet); if ((this.all && this.top != value) || (!this.all && this.left != value)) { if ((this.owner != null && this.owner.RightToLeftInternal) && (value == DataGridViewAdvancedCellBorderStyle.InsetDouble || value == DataGridViewAdvancedCellBorderStyle.OutsetDouble)) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Left")); } if (this.all) { if (this.right == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.right = DataGridViewAdvancedCellBorderStyle.Outset; } if (this.bottom == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.bottom = DataGridViewAdvancedCellBorderStyle.Outset; } } this.all = false; this.left = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// public DataGridViewAdvancedCellBorderStyle Right { get { if (this.all) { return this.top; } return this.right; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Right")); } this.RightInternal = value; } } internal DataGridViewAdvancedCellBorderStyle RightInternal { set { //Debug.Assert(Enum.IsDefined(typeof(DataGridViewAdvancedCellBorderStyle), value)); //Debug.Assert(value != DataGridViewAdvancedCellBorderStyle.NotSet); if ((this.all && this.top != value) || (!this.all && this.right != value)) { if ((this.owner != null && !this.owner.RightToLeftInternal) && (value == DataGridViewAdvancedCellBorderStyle.InsetDouble || value == DataGridViewAdvancedCellBorderStyle.OutsetDouble)) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Right")); } if (this.all) { if (this.bottom == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.bottom = DataGridViewAdvancedCellBorderStyle.Outset; } } this.all = false; this.right = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// public DataGridViewAdvancedCellBorderStyle Top { get { return this.top; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Top")); } this.TopInternal = value; } } internal DataGridViewAdvancedCellBorderStyle TopInternal { set { //Debug.Assert(Enum.IsDefined(typeof(DataGridViewAdvancedCellBorderStyle), value)); //Debug.Assert(value != DataGridViewAdvancedCellBorderStyle.NotSet); if ((this.all && this.top != value) || (!this.all && this.top != value)) { if (this.all) { if (this.right == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.right = DataGridViewAdvancedCellBorderStyle.Outset; } if (this.bottom == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.bottom = DataGridViewAdvancedCellBorderStyle.Outset; } } this.all = false; this.top = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// /// public override bool Equals(object other) { DataGridViewAdvancedBorderStyle dgvabsOther = other as DataGridViewAdvancedBorderStyle; if (dgvabsOther == null) { return false; } return dgvabsOther.all == this.all && dgvabsOther.top == this.top && dgvabsOther.left == this.left && dgvabsOther.bottom == this.bottom && dgvabsOther.right == this.right; } /// /// public override int GetHashCode() { return WindowsFormsUtils.GetCombinedHashCodes((int) this.top, (int) this.left, (int) this.bottom, (int) this.right); } /// /// public override string ToString() { return "DataGridViewAdvancedBorderStyle { All=" + this.All.ToString() + ", Left=" + this.Left.ToString() + ", Right=" + this.Right.ToString() + ", Top=" + this.Top.ToString() + ", Bottom=" + this.Bottom.ToString() + " }"; } /// /// object ICloneable.Clone() { DataGridViewAdvancedBorderStyle dgvabs = new DataGridViewAdvancedBorderStyle(this.owner, this.banned1, this.banned2, this.banned3); dgvabs.all = this.all; dgvabs.top = this.top; dgvabs.right = this.right; dgvabs.bottom = this.bottom; dgvabs.left = this.left; return dgvabs; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System; using System.Diagnostics; using System.ComponentModel; ///public sealed class DataGridViewAdvancedBorderStyle : ICloneable { private DataGridView owner; private bool all = true; private DataGridViewAdvancedCellBorderStyle banned1, banned2, banned3; private DataGridViewAdvancedCellBorderStyle top = DataGridViewAdvancedCellBorderStyle.None; private DataGridViewAdvancedCellBorderStyle left = DataGridViewAdvancedCellBorderStyle.None; private DataGridViewAdvancedCellBorderStyle right = DataGridViewAdvancedCellBorderStyle.None; private DataGridViewAdvancedCellBorderStyle bottom = DataGridViewAdvancedCellBorderStyle.None; /// public DataGridViewAdvancedBorderStyle() : this(null, DataGridViewAdvancedCellBorderStyle.NotSet, DataGridViewAdvancedCellBorderStyle.NotSet, DataGridViewAdvancedCellBorderStyle.NotSet) { } internal DataGridViewAdvancedBorderStyle(DataGridView owner) : this(owner, DataGridViewAdvancedCellBorderStyle.NotSet, DataGridViewAdvancedCellBorderStyle.NotSet, DataGridViewAdvancedCellBorderStyle.NotSet) { } /// /// Creates a new DataGridViewAdvancedBorderStyle. The specified owner will /// be notified when the values are changed. /// internal DataGridViewAdvancedBorderStyle(DataGridView owner, DataGridViewAdvancedCellBorderStyle banned1, DataGridViewAdvancedCellBorderStyle banned2, DataGridViewAdvancedCellBorderStyle banned3) { this.owner = owner; this.banned1 = banned1; this.banned2 = banned2; this.banned3 = banned3; } ///public DataGridViewAdvancedCellBorderStyle All { get { return this.all ? this.top : DataGridViewAdvancedCellBorderStyle.NotSet; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet || value == this.banned1 || value == this.banned2 || value == this.banned3) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "All")); } if (!this.all || this.top != value) { this.all = true; this.top = this.left = this.right = this.bottom = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// public DataGridViewAdvancedCellBorderStyle Bottom { get { if (this.all) { return this.top; } return this.bottom; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Bottom")); } this.BottomInternal = value; } } internal DataGridViewAdvancedCellBorderStyle BottomInternal { set { //Debug.Assert(Enum.IsDefined(typeof(DataGridViewAdvancedCellBorderStyle), value)); //Debug.Assert(value != DataGridViewAdvancedCellBorderStyle.NotSet); if ((this.all && this.top != value) || (!this.all && this.bottom != value)) { if (this.all) { if (this.right == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.right = DataGridViewAdvancedCellBorderStyle.Outset; } } this.all = false; this.bottom = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// public DataGridViewAdvancedCellBorderStyle Left { get { if (this.all) { return this.top; } return this.left; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Left")); } this.LeftInternal = value; } } internal DataGridViewAdvancedCellBorderStyle LeftInternal { set { //Debug.Assert(Enum.IsDefined(typeof(DataGridViewAdvancedCellBorderStyle), value)); //Debug.Assert(value != DataGridViewAdvancedCellBorderStyle.NotSet); if ((this.all && this.top != value) || (!this.all && this.left != value)) { if ((this.owner != null && this.owner.RightToLeftInternal) && (value == DataGridViewAdvancedCellBorderStyle.InsetDouble || value == DataGridViewAdvancedCellBorderStyle.OutsetDouble)) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Left")); } if (this.all) { if (this.right == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.right = DataGridViewAdvancedCellBorderStyle.Outset; } if (this.bottom == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.bottom = DataGridViewAdvancedCellBorderStyle.Outset; } } this.all = false; this.left = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// public DataGridViewAdvancedCellBorderStyle Right { get { if (this.all) { return this.top; } return this.right; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Right")); } this.RightInternal = value; } } internal DataGridViewAdvancedCellBorderStyle RightInternal { set { //Debug.Assert(Enum.IsDefined(typeof(DataGridViewAdvancedCellBorderStyle), value)); //Debug.Assert(value != DataGridViewAdvancedCellBorderStyle.NotSet); if ((this.all && this.top != value) || (!this.all && this.right != value)) { if ((this.owner != null && !this.owner.RightToLeftInternal) && (value == DataGridViewAdvancedCellBorderStyle.InsetDouble || value == DataGridViewAdvancedCellBorderStyle.OutsetDouble)) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Right")); } if (this.all) { if (this.bottom == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.bottom = DataGridViewAdvancedCellBorderStyle.Outset; } } this.all = false; this.right = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// public DataGridViewAdvancedCellBorderStyle Top { get { return this.top; } set { // Sequential enum. Valid values are 0x0 to 0x7 if (!ClientUtils.IsEnumValid(value, (int)value, (int)DataGridViewAdvancedCellBorderStyle.NotSet, (int)DataGridViewAdvancedCellBorderStyle.OutsetPartial)) { throw new InvalidEnumArgumentException("value", (int)value, typeof(DataGridViewAdvancedCellBorderStyle)); } if (value == DataGridViewAdvancedCellBorderStyle.NotSet) { throw new ArgumentException(SR.GetString(SR.DataGridView_AdvancedCellBorderStyleInvalid, "Top")); } this.TopInternal = value; } } internal DataGridViewAdvancedCellBorderStyle TopInternal { set { //Debug.Assert(Enum.IsDefined(typeof(DataGridViewAdvancedCellBorderStyle), value)); //Debug.Assert(value != DataGridViewAdvancedCellBorderStyle.NotSet); if ((this.all && this.top != value) || (!this.all && this.top != value)) { if (this.all) { if (this.right == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.right = DataGridViewAdvancedCellBorderStyle.Outset; } if (this.bottom == DataGridViewAdvancedCellBorderStyle.OutsetDouble) { this.bottom = DataGridViewAdvancedCellBorderStyle.Outset; } } this.all = false; this.top = value; if (this.owner != null) { this.owner.OnAdvancedBorderStyleChanged(this); } } } } /// /// public override bool Equals(object other) { DataGridViewAdvancedBorderStyle dgvabsOther = other as DataGridViewAdvancedBorderStyle; if (dgvabsOther == null) { return false; } return dgvabsOther.all == this.all && dgvabsOther.top == this.top && dgvabsOther.left == this.left && dgvabsOther.bottom == this.bottom && dgvabsOther.right == this.right; } /// /// public override int GetHashCode() { return WindowsFormsUtils.GetCombinedHashCodes((int) this.top, (int) this.left, (int) this.bottom, (int) this.right); } /// /// public override string ToString() { return "DataGridViewAdvancedBorderStyle { All=" + this.All.ToString() + ", Left=" + this.Left.ToString() + ", Right=" + this.Right.ToString() + ", Top=" + this.Top.ToString() + ", Bottom=" + this.Bottom.ToString() + " }"; } /// /// object ICloneable.Clone() { DataGridViewAdvancedBorderStyle dgvabs = new DataGridViewAdvancedBorderStyle(this.owner, this.banned1, this.banned2, this.banned3); dgvabs.all = this.all; dgvabs.top = this.top; dgvabs.right = this.right; dgvabs.bottom = this.bottom; dgvabs.left = this.left; return dgvabs; } } } // 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
- ColorBlend.cs
- DataSourceGroupCollection.cs
- DataGridViewAutoSizeModeEventArgs.cs
- AssociationType.cs
- TransferRequestHandler.cs
- MatchingStyle.cs
- DataSourceProvider.cs
- NavigationPropertyEmitter.cs
- Vector3DKeyFrameCollection.cs
- RectangleF.cs
- ZipIOLocalFileDataDescriptor.cs
- OperatorExpressions.cs
- QuaternionRotation3D.cs
- CodeSnippetTypeMember.cs
- ServiceModelReg.cs
- NumberFormatter.cs
- SafeWaitHandle.cs
- StylusPointProperty.cs
- ActivityBuilder.cs
- TrackPoint.cs
- ActivityDesigner.cs
- WebPartConnectionsDisconnectVerb.cs
- XslAst.cs
- PageAsyncTask.cs
- StrongNameUtility.cs
- BulletChrome.cs
- cookieexception.cs
- COM2IDispatchConverter.cs
- ConfigurationManagerHelper.cs
- XmlFormatExtensionPrefixAttribute.cs
- StringDictionary.cs
- DataGridHyperlinkColumn.cs
- StandardBindingOptionalReliableSessionElement.cs
- IdentityManager.cs
- Message.cs
- QilList.cs
- DependentList.cs
- XmlNamespaceMapping.cs
- EffectiveValueEntry.cs
- CompilationLock.cs
- DataServiceBuildProvider.cs
- ColumnPropertiesGroup.cs
- ToolStripRenderEventArgs.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- XamlFigureLengthSerializer.cs
- X509ChainElement.cs
- WindowsGraphicsCacheManager.cs
- CodeIndexerExpression.cs
- ResourceKey.cs
- SignedXmlDebugLog.cs
- ModulesEntry.cs
- CodeSubDirectory.cs
- SignatureDescription.cs
- ApplicationException.cs
- BooleanProjectedSlot.cs
- ResourceDefaultValueAttribute.cs
- StylusEventArgs.cs
- Decoder.cs
- DataTableTypeConverter.cs
- _Semaphore.cs
- MediaTimeline.cs
- RewritingProcessor.cs
- RadioButtonPopupAdapter.cs
- TimeSpanParse.cs
- Item.cs
- FunctionUpdateCommand.cs
- PrintingPermission.cs
- Item.cs
- OdbcException.cs
- AuthenticationException.cs
- SortExpressionBuilder.cs
- Slider.cs
- CustomTypeDescriptor.cs
- RIPEMD160Managed.cs
- ContainerFilterService.cs
- BuilderPropertyEntry.cs
- ToggleProviderWrapper.cs
- SQLStringStorage.cs
- Composition.cs
- TextDecorationLocationValidation.cs
- Matrix.cs
- Int32Rect.cs
- QueryExpr.cs
- ScrollViewer.cs
- Hash.cs
- SendReply.cs
- HttpSocketManager.cs
- ObjectMemberMapping.cs
- DesignerDataView.cs
- InkSerializer.cs
- XmlCDATASection.cs
- DataKey.cs
- StylusPlugInCollection.cs
- UnmanagedMemoryAccessor.cs
- DetailsViewRowCollection.cs
- PopupControlService.cs
- PermissionAttributes.cs
- ToolTipAutomationPeer.cs
- LexicalChunk.cs
- DBConnection.cs