2016-06-03 5 views
0

Итак, у меня есть объект с некоторыми свойствами, например: Dim.d1, Dim.d2,...,Dim.d50 , который возвращает строки. Например: Dim.d1="Description A", Dim.d2="Description B",etc.Вычислить выражение

То, что я хочу сделать, это приписывать эти описания заголовков в Gridview и что я думал, используя индексы, как этот псевдокод:

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

Так, в принципе, мне нужен способ, чтобы изменить вызов свойств объекта в зависимости от индекса, но я не знаю, возможно ли это. Когда index i=0, позвоните по телефону Dim.d1, когда index i=1 звоните Dim.d2 и так далее до 50.

Любые идеи?

+3

'Dim' не кажется, что это будет лучшее название для использования переменная в vb.net – juharr

ответ

1

Вы можете использовать методы в System.Reflection пространстве имен, чтобы сделать это. Тем не менее, ответ представлен для ответа на вопрос - вы должны посмотреть на использование некоторых вариантов, предложенных другими респондентами, например. используйте List(Of String) или что-то подобное.

Во всяком случае, скажем, у вас есть класс:

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

End Class 

И тогда, скажем, вы создаете экземпляр этого класса и установить его свойства:

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

Если после этого вы хотите иметь цикл от 1 до 3 и доступ, например, d1, d2, d2 и т.д., то это, где вы используете 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 

даст вам результат:

Foo 
Bar 
Test 
+0

Привет, Робин! Я думаю, что это именно то, что я ищу. Но мне нужно это для C#. Я дам ему попробовать с соответствующими изменениями. Было недоразумение, так как мой объект называется Dim (для Dimension) и не имеет ничего общего с переменной VB.net. –

+0

Ключевыми переводами будут 'System.Reflection.PropertyInfo info = obj.GetType(). GetProperty (" d "+ i);' и 'string val = info.GetValue (obj, Reflection.BindingFlags.GetProperty, null, null , null); '. Проверьте http://converter.telerik.com/ –

+0

Это сработало! Именно то, что мне нужно! Большое вам спасибо =) –

3

Это то, для чего нужны массивы или списки!

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]; 
} 
+0

Я хотел бы избежать написания кода 50 раз, потому что это может быть больше или меньше ... На данный момент у меня 50 описаний, но в будущем может быть больше, поэтому это должно быть динамическим. –

+0

Итак, используйте «Список » и вызовите '.Add (« Описание »)' – Jamiec

0

Как и в случае с Jamiec, используйте массив или список. Где вы можете найти этикеточные этикетки?

Если у вас есть описание в разделенных запятыми, вот код vb.net:

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 
+0

Привет, Ulli. Да, теперь я замечаю, что, возможно, я не понял в своем вопросе. «Описание A» или «Описание B» были просто примерами (я не могу поместить настоящую вещь, так как это информация, предоставленная моей компанией. Но описания поступают из linq из запроса в базе данных, которая возвращает строку, в этом case, с 50 столбцами, каждый из которых содержит позорные описания. Вот почему я не уверен, как реально использовать List или Array здесь, по крайней мере, без написания 50 описаний вручную. Я думаю, что Reflection - это способ сделать это, но не знаю как. –

 Смежные вопросы

  • Нет связанных вопросов^_^