Hi,
I have seen variations of this question asked on several different posts, but either the fix has either been irrelevant to my particular situation or the question has gone unanswered. I have created a simplified example that you can run on your own computer, so as to easily demonstrate my problem.
I have a simple class "dog" which contains a property "Breed" of enum type "DogBreeds". I wish to display this value in a GridView combo box, but using more user-friendly text than the enum values.
This is my data class:
Public
Class
Dog
Private
dmName
As
String
Private
dmColour
As
String
Private
dmBreed
As
DogBreeds
Public
Sub
New
(
ByVal
_name
As
String
,
ByVal
_colour
As
String
,
ByVal
_breed
As
DogBreeds)
MyBase
.
New
()
dmName = _name
dmColour = _colour
dmBreed = _breed
End
Sub
Public
Property
Name()
As
String
Get
Return
dmName
End
Get
Set
(
ByVal
value
As
String
)
dmName = value
End
Set
End
Property
Public
Property
Colour()
As
String
Get
Return
dmColour
End
Get
Set
(
ByVal
value
As
String
)
dmColour = value
End
Set
End
Property
Public
Property
Breed()
As
DogBreeds
Get
Return
dmBreed
End
Get
Set
(
ByVal
value
As
DogBreeds)
dmBreed = value
End
Set
End
Property
End
Class
And my Enum:
Public
Enum
DogBreeds
Staff
Husky
GShep
End
Enum
To demonstrate the problem, create a GridView on a form called "dgv" and add the following code:
'Add some example data
dogs =
New
List(Of Dog)
dogs.Add(
New
Dog(
"Sacha"
,
"Brown"
, DogBreeds.Staff))
dogs.Add(
New
Dog(
"Nimbus"
,
"Black/Brown"
, DogBreeds.GShep))
dogs.Add(
New
Dog(
"Chinook"
,
"White"
, DogBreeds.Husky))
'Set the grid data source:
dgv.DataSource = dogs
'Create the data source for the combo column, comprosed of a column of the enum and a column of the
' "friendly" string represetion for that enum value
Dim
dtBreeds
As
New
DataTable
dtBreeds.Columns.Add(
"BreedEnum"
,
GetType
(DogBreeds))
dtBreeds.Columns.Add(
"BreedName"
,
GetType
(
String
))
dtBreeds.Rows.Add(DogBreeds.GShep,
"German Sheppard"
)
dtBreeds.Rows.Add(DogBreeds.Husky,
"Icelandic Husky"
)
dtBreeds.Rows.Add(DogBreeds.Staff,
"Staffordshire Bull Terrier"
)
'Set the column display and value members and the data source for the combo
With
DirectCast
(dgv.Columns(
"Breed"
), GridViewComboBoxColumn)
.DisplayMember =
"BreedName"
.ValueMember =
"BreedEnum"
.DataSource = dtBreeds
End
With
Run the form. All the combos are blank, but when you click on a combo cell, the correct value is displayed, but disappears again when focus is lost from the cell, so it looks like a display bug. I have successfully used this method on a DataGrid, so not sure why it does not work here.
Any help much appreciated
Shane