2013-11-17 2 views
0

Выполняю обычную сортировку по gridview, которая привязана к общему списку.Сортировка GridView с общим списком в vb.net

Моя проблема заключается в следующем:

If direction.ToLower.Contains("desc") Then 
     mygv.DataSource = myList.OrderByDescending(Function(w) w.Name) 
     GridViewSortDirection = SortDirection.Descending 
    Else 
     mygv.DataSource = myList.OrderBy(Function(w) w.Name) 
     GridViewSortDirection = SortDirection.Ascending 
    End If 

    mygv.DataBind() 

Как я могу заменить поле w.Name с параметром заданной для этой функции, так как это может быть имя, город, страна или любой другой области?

P.S. в C# с использованием анонимного типа это легко, но я использую vb.net здесь.

Благодаря

+0

У PS VB.Net также есть анонимные типы. Однако я честно не вижу, как вы можете это сделать с ними. – Aron

ответ

0

Предполагая, что вы пытаетесь сделать это, потому что вы используете Linq к EF или Linq для SQL ...

Import System.Linq.Expressions 

Dim propertyName = "Name" 
If direction.ToLower.Contains("desc") Then 
    mygv.DataSource = myList.OrderByDescending(PropertyOf(Of Row)(propertyName)) 
    GridViewSortDirection = SortDirection.Descending 
Else 
    mygv.DataSource = myList.OrderBy(PropertyOf(Of Row)(propertyName)) 
    GridViewSortDirection = SortDirection.Ascending 
End If 

mygv.DataBind() 


Public Function PropertyOf(Of T)(string propertyName) as Expression(Of Func(Of T, object)) 
    Dim param = Expression.Parameter("x", typeOf T) 
    Dim property = Expression.PropertyOrField(param, propertyName); 
    Return Expression.Lambda(property, param) 
End Function 
+0

Извините, если у меня VB.Net немного ржавый ... – Aron

+0

PropertyOf (Of Row) с помощью ошибки –

+0

... Я не мог сказать, что ваш список (Of T), так что я просто назвал его Row ... замените 'Row' на свой тип List. Подумайте об этом ... вы не сказали, что такое тип 'myList'. Это важно: что Linq использовать. – Aron

0

Добавить этот код в следующем случае GridView:

Protected Sub Gridview_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs) Handles Gridview.Sorting 
    myList = myList.OrderBy(Function(x) x.GetType().GetProperty(e.SortExpression).GetValue(x)).ToList() 
End Sub 

Это должно выполнить эту работу.

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