Flavio Justino
Flavio Justino

Reputation: 105

Evaluate expression

So, I have an object with some properties, like this: Dim.d1, Dim.d2,...,Dim.d50 that return strings. For example: Dim.d1="Description A", Dim.d2="Description B",etc.

What I want to do is to attribute these descriptions to the headers of a Gridview and for that I was thinking using indexes, like this pseudocode:

for i=0 until 49
e.Row.Cells[i].Text = Evaluate(Dim.d(i+1))

So, basically, I need a way to change the call to my object properties depending on the index, but I don't know if it is possible. When index i=0, call Dim.d1, when index i=1 call Dim.d2, and so on until 50.

Any ideas?

Upvotes: 0

Views: 329

Answers (3)

Robin Mackenzie
Robin Mackenzie

Reputation: 19319

You can use methods in the System.Reflection namespace to do this. However, the answer is presented in order to answer the question - you should look at using some of the options suggested by other answerers e.g. use a List(Of String) or something similar.

Anyway, let's say you have a class:

Public Class Class1
    Public Property d1 As String
    Public Property d2 As String
    Public Property d3 As String

End Class

And then, let's say you create an instance of that class and set its properties:

Dim obj As New Class1
obj.d1 = "Foo"
obj.d2 = "Bar"
obj.d3 = "Test"

If you then want to have a loop from 1 to 3, and access e.g. d1, d2, d2 etc then this is where you use Reflection:

For i As Integer = 1 To 3
    Dim info As System.Reflection.PropertyInfo = obj.GetType().GetProperty("d" & i)
    Dim val As String = info.GetValue(obj, Reflection.BindingFlags.GetProperty, Nothing, Nothing, Nothing)
    Debug.Print(val.ToString)
Next

Will give you the output:

Foo
Bar
Test

Upvotes: 1

Ulli
Ulli

Reputation: 510

Like Jamiec already posted, use an Array or List. Where do you description labels come from?

If you have your descriptions in a comma separated string, here is the vb.net code:

dim descriptions as String = "Description A,Description B,Description C"
dim myArray as String() = descriptions.Split(cchar(","))

for i as Integer = 1 To myArray.Length
    e.Row.Cells(i-1).Text = myArray(i)
Next

Upvotes: 0

Jamiec
Jamiec

Reputation: 136114

This is what Arrays or Lists are for!

var dim = new string[50];
dim[0] = "Description A";
dim[1] = "Description B";
..// etc

for(var i=0;i<49;i++)
{
    e.Row.Cells[i].Text = dim[i];
}

Upvotes: 3

Related Questions