|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Deriving from Abstract Classes with Enums and Varying Object Typesdeal with this situation: The app has a number of "manager" classes that handle the data access. They all have several routines that are identical, except for the object type and database action specific to that particular class, such as "Public ReadOnly Property Item(ByVal SystemID As Integer) As CEmployee" or "Public Shared Function Save(ByVal TheItem As CEmployee) As Boolean". Each of the object classes also have a bunch of common properties and methods that are inherited from an abstract base class. What I want to do with the manager classes is rewrite them using an abstract class with MustOverride properties and methods. Where I'm hung up is the existing implementation uses an Enum that defines the database field names and ordinal positions in the SELECT statement used to create the datareader. For example: Public Class EmployeeManager Public Enum MyFields NameSystemID = 0 NameFirst NameMiddle NameLast DateHired RecStatus RecDateAdd RecDateRev RecAddBy RecRevBy End Enum Private Shared _FieldList As ArrayList = Nothing Public Shared ReadOnly Property FieldList() As ArrayList Get If _FieldList Is Nothing Then _FieldList = New ArrayList Dim arNames() As String arNames = MyFields.GetNames(GetType(MyFields)) For x As Integer = 0 To arNames.GetUpperBound(0) _FieldList.Add(New VisarEnumBindingItem(EnumValue:=x, EnumLabel:=arNames(x)) Next End If Return _FieldList End Get End Property Private Shared _FieldListString As String = "" Public Shared ReadOnly Property FieldListString() As String Get If _FieldListString = "" Then Dim ThisItem As VisarEnumBindingItem = Nothing For x As Integer = 0 To FieldList.Count -1 ThisItem = CType(_FieldList(x), VisarEnumBindingItem) _FieldListString += ThisItem.StringValue & ", " Next _FieldListString = Left(_FieldListString, _FieldListString.LastIndexOf(", ")) End If Return _FieldListString End Get End Property ' Overloaded Item property creates a command to retrieve by PK or AK, passes command to ItemFetch, which in turn calls ItemFill to unpack the datareader into the instance object and pass it back up the chain. Private Shared Function ItemFill(ByVal ItemReader As OleDbDataReader) As CEmployee With ItemReader Return New CEmployee(RecSystemID:=.GetInt32(MyFields.NameSystemID), RecStatus:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecStatus)), RecDateAdd:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateAdd)), RecDateRev:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateRev)), RecAddBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecAddBy)), RecRevBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecRevBy)), NameFirst:=VisarGoodies.MakeString(.GetValue(MyFields.NameFirst)), NameMiddle:=VisarGoodies.MakeString(.GetValue(MyFields.NameMiddle)), NameLast:=VisarGoodies.MakeString(.GetValue(MyFields.NameLast))) End With End Function End Class The way it's designed, changes to the order of fields in the select statement or even actual field names only need to be made in the Enum. The select, insert, and update statements are dynamically constructed in each of the managers from the FieldList arraylist. How can I create the identical functionality using an abstract class in VB2005, also placing the code that constructs the "FieldList" from the Enum into a shared method in a separate utility class? I tried using a placeholder enum and the FieldList property in the base class, and a shadowed enum in a derived class, but when executed, it uses the base enum, not the shadowed one. It does work when place the enum and override FieldList in each of the derived classes but I don't want to implement identical code over and over. Thanks, Gino Well I'm confused.....
Is all this just for the purpose of selecting, updating, inserting records to and from a database? If so then I'd say this is in major need of a rewrite. Why make things harder than they need to be? Confused Newbie wrote: Show quoteHide quote > I'm converting an app written in VB 2003 to 2005 and need advice for how to > deal with this situation: > > The app has a number of "manager" classes that handle the data access. They > all have several routines that are identical, except for the object type and > database action specific to that particular class, such as "Public ReadOnly > Property Item(ByVal SystemID As Integer) As CEmployee" or "Public Shared > Function Save(ByVal TheItem As CEmployee) As Boolean". Each of the object > classes also have a bunch of common properties and methods that are > inherited from an abstract base class. > > What I want to do with the manager classes is rewrite them using an abstract > class with MustOverride properties and methods. Where I'm hung up is the > existing implementation uses an Enum that defines the database field names > and ordinal positions in the SELECT statement used to create the datareader. > For example: > > Public Class EmployeeManager > > Public Enum MyFields > NameSystemID = 0 > NameFirst > NameMiddle > NameLast > DateHired > RecStatus > RecDateAdd > RecDateRev > RecAddBy > RecRevBy > End Enum > > Private Shared _FieldList As ArrayList = Nothing > Public Shared ReadOnly Property FieldList() As ArrayList > Get > If _FieldList Is Nothing Then > _FieldList = New ArrayList > Dim arNames() As String > arNames = MyFields.GetNames(GetType(MyFields)) > For x As Integer = 0 To arNames.GetUpperBound(0) > _FieldList.Add(New VisarEnumBindingItem(EnumValue:=x, > EnumLabel:=arNames(x)) > Next > End If > Return _FieldList > End Get > End Property > > Private Shared _FieldListString As String = "" > Public Shared ReadOnly Property FieldListString() As String > Get > If _FieldListString = "" Then > Dim ThisItem As VisarEnumBindingItem = Nothing > For x As Integer = 0 To FieldList.Count -1 > ThisItem = CType(_FieldList(x), VisarEnumBindingItem) > _FieldListString += ThisItem.StringValue & ", " > Next > _FieldListString = Left(_FieldListString, > _FieldListString.LastIndexOf(", ")) > End If > Return _FieldListString > End Get > End Property > > ' Overloaded Item property creates a command to retrieve by PK or AK, > passes command to ItemFetch, which in turn calls ItemFill to unpack the > datareader into the instance object and pass it back up the chain. > > Private Shared Function ItemFill(ByVal ItemReader As OleDbDataReader) As > CEmployee > With ItemReader > Return New CEmployee(RecSystemID:=.GetInt32(MyFields.NameSystemID), > RecStatus:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecStatus)), > RecDateAdd:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateAdd)), > RecDateRev:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateRev)), > RecAddBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecAddBy)), > RecRevBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecRevBy)), > NameFirst:=VisarGoodies.MakeString(.GetValue(MyFields.NameFirst)), > NameMiddle:=VisarGoodies.MakeString(.GetValue(MyFields.NameMiddle)), > NameLast:=VisarGoodies.MakeString(.GetValue(MyFields.NameLast))) > End With > End Function > > End Class > > The way it's designed, changes to the order of fields in the select > statement or even actual field names only need to be made in the Enum. The > select, insert, and update statements are dynamically constructed in each of > the managers from the FieldList arraylist. > > How can I create the identical functionality using an abstract class in > VB2005, also placing the code that constructs the "FieldList" from the Enum > into a shared method in a separate utility class? I tried using a > placeholder enum and the FieldList property in the base class, and a > shadowed enum in a derived class, but when executed, it uses the base enum, > not the shadowed one. It does work when place the enum and override > FieldList in each of the derived classes but I don't want to implement > identical code over and over. > > Thanks, > > Gino The manager classes I'm rewriting perform numerous other tasks and all of
our in-house apps are built around them. They're quite simple and elegant considering all the heavy lifting they have to do. If you think this design is wrong, then please post an exact example of how you would rewrite them. Just saying it's harder than it need be and needs a major rewrite is not in the least bit helpful. Show quoteHide quote "Izzy" <israel.rich***@gmail.com> wrote in message news:1153336768.640345.77960@p79g2000cwp.googlegroups.com... > Well I'm confused..... > > Is all this just for the purpose of selecting, updating, inserting > records to and from a database? > > If so then I'd say this is in major need of a rewrite. Why make things > harder than they need to be? > > > Confused Newbie wrote: >> I'm converting an app written in VB 2003 to 2005 and need advice for how >> to >> deal with this situation: >> >> The app has a number of "manager" classes that handle the data access. >> They >> all have several routines that are identical, except for the object type >> and >> database action specific to that particular class, such as "Public >> ReadOnly >> Property Item(ByVal SystemID As Integer) As CEmployee" or "Public Shared >> Function Save(ByVal TheItem As CEmployee) As Boolean". Each of the >> object >> classes also have a bunch of common properties and methods that are >> inherited from an abstract base class. >> >> What I want to do with the manager classes is rewrite them using an >> abstract >> class with MustOverride properties and methods. Where I'm hung up is the >> existing implementation uses an Enum that defines the database field >> names >> and ordinal positions in the SELECT statement used to create the >> datareader. >> For example: >> >> Public Class EmployeeManager >> >> Public Enum MyFields >> NameSystemID = 0 >> NameFirst >> NameMiddle >> NameLast >> DateHired >> RecStatus >> RecDateAdd >> RecDateRev >> RecAddBy >> RecRevBy >> End Enum >> >> Private Shared _FieldList As ArrayList = Nothing >> Public Shared ReadOnly Property FieldList() As ArrayList >> Get >> If _FieldList Is Nothing Then >> _FieldList = New ArrayList >> Dim arNames() As String >> arNames = MyFields.GetNames(GetType(MyFields)) >> For x As Integer = 0 To arNames.GetUpperBound(0) >> _FieldList.Add(New VisarEnumBindingItem(EnumValue:=x, >> EnumLabel:=arNames(x)) >> Next >> End If >> Return _FieldList >> End Get >> End Property >> >> Private Shared _FieldListString As String = "" >> Public Shared ReadOnly Property FieldListString() As String >> Get >> If _FieldListString = "" Then >> Dim ThisItem As VisarEnumBindingItem = Nothing >> For x As Integer = 0 To FieldList.Count -1 >> ThisItem = CType(_FieldList(x), VisarEnumBindingItem) >> _FieldListString += ThisItem.StringValue & ", " >> Next >> _FieldListString = Left(_FieldListString, >> _FieldListString.LastIndexOf(", ")) >> End If >> Return _FieldListString >> End Get >> End Property >> >> ' Overloaded Item property creates a command to retrieve by PK or AK, >> passes command to ItemFetch, which in turn calls ItemFill to unpack the >> datareader into the instance object and pass it back up the chain. >> >> Private Shared Function ItemFill(ByVal ItemReader As OleDbDataReader) >> As >> CEmployee >> With ItemReader >> Return New >> CEmployee(RecSystemID:=.GetInt32(MyFields.NameSystemID), >> RecStatus:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecStatus)), >> RecDateAdd:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateAdd)), >> RecDateRev:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateRev)), >> RecAddBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecAddBy)), >> RecRevBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecRevBy)), >> NameFirst:=VisarGoodies.MakeString(.GetValue(MyFields.NameFirst)), >> NameMiddle:=VisarGoodies.MakeString(.GetValue(MyFields.NameMiddle)), >> NameLast:=VisarGoodies.MakeString(.GetValue(MyFields.NameLast))) >> End With >> End Function >> >> End Class >> >> The way it's designed, changes to the order of fields in the select >> statement or even actual field names only need to be made in the Enum. >> The >> select, insert, and update statements are dynamically constructed in each >> of >> the managers from the FieldList arraylist. >> >> How can I create the identical functionality using an abstract class in >> VB2005, also placing the code that constructs the "FieldList" from the >> Enum >> into a shared method in a separate utility class? I tried using a >> placeholder enum and the FieldList property in the base class, and a >> shadowed enum in a derived class, but when executed, it uses the base >> enum, >> not the shadowed one. It does work when place the enum and override >> FieldList in each of the derived classes but I don't want to implement >> identical code over and over. >> >> Thanks, >> >> Gino > Confused Newbie,
I would consider using a Generic class, passing the Enum & object type as type parameters Something like: Dim employeManager as New Manager(Of Employee, Employee.MyFields) The "trick" is the implementation of ItemFill, as you need the constructor to Employee, generally I make Manager a base class... Alternatively you could define "Manager" as a shared member of Employee itself: Public Class Employee Public Shared ReadOnly Manager As New EmployeeManager() Public Enum MyFields NameSystemID = 0 NameFirst NameMiddle NameLast DateHired RecStatus RecDateAdd RecDateRev RecAddBy RecRevBy End Enum End Class Public Class EmployeeManager Inherits Manager(Of Employee, Employee.MyFields) End Class Where Manager is defined something like: Public MustInherit Class Manager(Of T As Class, F) Private _FieldList As ArrayList = Nothing Public ReadOnly Property FieldList() As ArrayList Get If _FieldList Is Nothing Then _FieldList = New ArrayList Dim arNames() As String arNames = [Enum].GetNames(GetType(F)) For x As Integer = 0 To arNames.GetUpperBound(0) _FieldList.Add(New VisarEnumBindingItem(EnumValue:=x, EnumLabel:=arNames(x))) Next End If Return _FieldList End Get End Property Private _FieldListString As String = "" Public ReadOnly Property FieldListString() As String Get If _FieldListString = "" Then Dim ThisItem As VisarEnumBindingItem = Nothing For x As Integer = 0 To FieldList.Count - 1 ThisItem = CType(_FieldList(x), VisarEnumBindingItem) _FieldListString += ThisItem.StringValue & ", " Next _FieldListString = Left(_FieldListString, _FieldListString.LastIndexOf(", ")) End If Return _FieldListString End Get End Property Public MustOverride Function ItemFill(ByVal ItemReader As OleDbDataReader) As T End Class -- Show quoteHide quoteHope this helps Jay B. Harlow [MVP - Outlook] ..NET Application Architect, Enthusiast, & Evangelist T.S. Bradley - http://www.tsbradley.net "Confused Newbie" <nope@spam.duh> wrote in message news:uUz5IF2qGHA.3648@TK2MSFTNGP03.phx.gbl... | I'm converting an app written in VB 2003 to 2005 and need advice for how to | deal with this situation: | | The app has a number of "manager" classes that handle the data access. They | all have several routines that are identical, except for the object type and | database action specific to that particular class, such as "Public ReadOnly | Property Item(ByVal SystemID As Integer) As CEmployee" or "Public Shared | Function Save(ByVal TheItem As CEmployee) As Boolean". Each of the object | classes also have a bunch of common properties and methods that are | inherited from an abstract base class. | | What I want to do with the manager classes is rewrite them using an abstract | class with MustOverride properties and methods. Where I'm hung up is the | existing implementation uses an Enum that defines the database field names | and ordinal positions in the SELECT statement used to create the datareader. | For example: | | Public Class EmployeeManager | | Public Enum MyFields | NameSystemID = 0 | NameFirst | NameMiddle | NameLast | DateHired | RecStatus | RecDateAdd | RecDateRev | RecAddBy | RecRevBy | End Enum | | Private Shared _FieldList As ArrayList = Nothing | Public Shared ReadOnly Property FieldList() As ArrayList | Get | If _FieldList Is Nothing Then | _FieldList = New ArrayList | Dim arNames() As String | arNames = MyFields.GetNames(GetType(MyFields)) | For x As Integer = 0 To arNames.GetUpperBound(0) | _FieldList.Add(New VisarEnumBindingItem(EnumValue:=x, | EnumLabel:=arNames(x)) | Next | End If | Return _FieldList | End Get | End Property | | Private Shared _FieldListString As String = "" | Public Shared ReadOnly Property FieldListString() As String | Get | If _FieldListString = "" Then | Dim ThisItem As VisarEnumBindingItem = Nothing | For x As Integer = 0 To FieldList.Count -1 | ThisItem = CType(_FieldList(x), VisarEnumBindingItem) | _FieldListString += ThisItem.StringValue & ", " | Next | _FieldListString = Left(_FieldListString, | _FieldListString.LastIndexOf(", ")) | End If | Return _FieldListString | End Get | End Property | | ' Overloaded Item property creates a command to retrieve by PK or AK, | passes command to ItemFetch, which in turn calls ItemFill to unpack the | datareader into the instance object and pass it back up the chain. | | Private Shared Function ItemFill(ByVal ItemReader As OleDbDataReader) As | CEmployee | With ItemReader | Return New CEmployee(RecSystemID:=.GetInt32(MyFields.NameSystemID), | RecStatus:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecStatus)), | RecDateAdd:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateAdd)), | RecDateRev:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateRev)), | RecAddBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecAddBy)), | RecRevBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecRevBy)), | NameFirst:=VisarGoodies.MakeString(.GetValue(MyFields.NameFirst)), | NameMiddle:=VisarGoodies.MakeString(.GetValue(MyFields.NameMiddle)), | NameLast:=VisarGoodies.MakeString(.GetValue(MyFields.NameLast))) | End With | End Function | | End Class | | The way it's designed, changes to the order of fields in the select | statement or even actual field names only need to be made in the Enum. The | select, insert, and update statements are dynamically constructed in each of | the managers from the FieldList arraylist. | | How can I create the identical functionality using an abstract class in | VB2005, also placing the code that constructs the "FieldList" from the Enum | into a shared method in a separate utility class? I tried using a | placeholder enum and the FieldList property in the base class, and a | shadowed enum in a derived class, but when executed, it uses the base enum, | not the shadowed one. It does work when place the enum and override | FieldList in each of the derived classes but I don't want to implement | identical code over and over. | | Thanks, | | Gino | | Thanks so much, Jay! This is what I was looking for. I couldn't for the
life of me remember generics classes yesterday, even with BindingList staring me right in the face. Gino Show quoteHide quote "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow_***@tsbradley.net> wrote in message news:%23i2Ez64qGHA.5008@TK2MSFTNGP05.phx.gbl... > Confused Newbie, > I would consider using a Generic class, passing the Enum & object type as > type parameters > > Something like: > > Dim employeManager as New Manager(Of Employee, Employee.MyFields) > > The "trick" is the implementation of ItemFill, as you need the constructor > to Employee, generally I make Manager a base class... > > Alternatively you could define "Manager" as a shared member of Employee > itself: > > Public Class Employee > > Public Shared ReadOnly Manager As New EmployeeManager() > > Public Enum MyFields > NameSystemID = 0 > NameFirst > NameMiddle > NameLast > DateHired > RecStatus > RecDateAdd > RecDateRev > RecAddBy > RecRevBy > End Enum > > End Class > > Public Class EmployeeManager > Inherits Manager(Of Employee, Employee.MyFields) > > End Class > > Where Manager is defined something like: > > Public MustInherit Class Manager(Of T As Class, F) > > Private _FieldList As ArrayList = Nothing > Public ReadOnly Property FieldList() As ArrayList > Get > If _FieldList Is Nothing Then > _FieldList = New ArrayList > Dim arNames() As String > arNames = [Enum].GetNames(GetType(F)) > For x As Integer = 0 To arNames.GetUpperBound(0) > _FieldList.Add(New > VisarEnumBindingItem(EnumValue:=x, EnumLabel:=arNames(x))) > Next > End If > Return _FieldList > End Get > End Property > > Private _FieldListString As String = "" > Public ReadOnly Property FieldListString() As String > Get > If _FieldListString = "" Then > Dim ThisItem As VisarEnumBindingItem = Nothing > For x As Integer = 0 To FieldList.Count - 1 > ThisItem = CType(_FieldList(x), > VisarEnumBindingItem) > _FieldListString += ThisItem.StringValue & ", " > Next > _FieldListString = Left(_FieldListString, > _FieldListString.LastIndexOf(", ")) > End If > Return _FieldListString > End Get > End Property > > Public MustOverride Function ItemFill(ByVal ItemReader As > OleDbDataReader) As T > > End Class > > -- > Hope this helps > Jay B. Harlow [MVP - Outlook] > .NET Application Architect, Enthusiast, & Evangelist > T.S. Bradley - http://www.tsbradley.net > > > "Confused Newbie" <nope@spam.duh> wrote in message > news:uUz5IF2qGHA.3648@TK2MSFTNGP03.phx.gbl... > | I'm converting an app written in VB 2003 to 2005 and need advice for how > to > | deal with this situation: > | > | The app has a number of "manager" classes that handle the data access. > They > | all have several routines that are identical, except for the object type > and > | database action specific to that particular class, such as "Public > ReadOnly > | Property Item(ByVal SystemID As Integer) As CEmployee" or "Public Shared > | Function Save(ByVal TheItem As CEmployee) As Boolean". Each of the > object > | classes also have a bunch of common properties and methods that are > | inherited from an abstract base class. > | > | What I want to do with the manager classes is rewrite them using an > abstract > | class with MustOverride properties and methods. Where I'm hung up is > the > | existing implementation uses an Enum that defines the database field > names > | and ordinal positions in the SELECT statement used to create the > datareader. > | For example: > | > | Public Class EmployeeManager > | > | Public Enum MyFields > | NameSystemID = 0 > | NameFirst > | NameMiddle > | NameLast > | DateHired > | RecStatus > | RecDateAdd > | RecDateRev > | RecAddBy > | RecRevBy > | End Enum > | > | Private Shared _FieldList As ArrayList = Nothing > | Public Shared ReadOnly Property FieldList() As ArrayList > | Get > | If _FieldList Is Nothing Then > | _FieldList = New ArrayList > | Dim arNames() As String > | arNames = MyFields.GetNames(GetType(MyFields)) > | For x As Integer = 0 To arNames.GetUpperBound(0) > | _FieldList.Add(New VisarEnumBindingItem(EnumValue:=x, > | EnumLabel:=arNames(x)) > | Next > | End If > | Return _FieldList > | End Get > | End Property > | > | Private Shared _FieldListString As String = "" > | Public Shared ReadOnly Property FieldListString() As String > | Get > | If _FieldListString = "" Then > | Dim ThisItem As VisarEnumBindingItem = Nothing > | For x As Integer = 0 To FieldList.Count -1 > | ThisItem = CType(_FieldList(x), VisarEnumBindingItem) > | _FieldListString += ThisItem.StringValue & ", " > | Next > | _FieldListString = Left(_FieldListString, > | _FieldListString.LastIndexOf(", ")) > | End If > | Return _FieldListString > | End Get > | End Property > | > | ' Overloaded Item property creates a command to retrieve by PK or AK, > | passes command to ItemFetch, which in turn calls ItemFill to unpack the > | datareader into the instance object and pass it back up the chain. > | > | Private Shared Function ItemFill(ByVal ItemReader As OleDbDataReader) > As > | CEmployee > | With ItemReader > | Return New > CEmployee(RecSystemID:=.GetInt32(MyFields.NameSystemID), > | RecStatus:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecStatus)), > | RecDateAdd:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateAdd)), > | RecDateRev:=VisarGoodies.MakeDate(.GetValue(MyFields.RecDateRev)), > | RecAddBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecAddBy)), > | RecRevBy:=VisarGoodies.MakeInt32(.GetValue(MyFields.RecRevBy)), > | NameFirst:=VisarGoodies.MakeString(.GetValue(MyFields.NameFirst)), > | NameMiddle:=VisarGoodies.MakeString(.GetValue(MyFields.NameMiddle)), > | NameLast:=VisarGoodies.MakeString(.GetValue(MyFields.NameLast))) > | End With > | End Function > | > | End Class > | > | The way it's designed, changes to the order of fields in the select > | statement or even actual field names only need to be made in the Enum. > The > | select, insert, and update statements are dynamically constructed in > each > of > | the managers from the FieldList arraylist. > | > | How can I create the identical functionality using an abstract class in > | VB2005, also placing the code that constructs the "FieldList" from the > Enum > | into a shared method in a separate utility class? I tried using a > | placeholder enum and the FieldList property in the base class, and a > | shadowed enum in a derived class, but when executed, it uses the base > enum, > | not the shadowed one. It does work when place the enum and override > | FieldList in each of the derived classes but I don't want to implement > | identical code over and over. > | > | Thanks, > | > | Gino > | > | > >
disabling checkbox in checkedlistbox
Argument not specified check database connection/open Datagrids (again) ComboBox SelectionChangeCommitted event fires twice VB6 to VB.NET Create Recordset from a non standard data source Crystal Reports and Data Tables. TreeView Nodes and Icons Freeze and unfreeze a process |
|||||||||||||||||||||||