ObjectDataSource가 바인딩 된 Gridview가 있고 열을 정렬하고 있습니다. Sorting
이벤트에서 나는 다음을 호출합니다.정렬 후 ObjectDataSource의 DataSource를 재 할당하는 방법은 무엇입니까?
e.Cancel = True
Me.ods.Select()
Me.gv.DataBind()
모두 괜찮습니다. 이제 ODS_Selected
이벤트에서 LINQ OrderBy
문을 사용하여 반환 된 목록 컬렉션을 조작합니다. 문제는 이 아니고이 컬렉션에서 직접 요소를 수정하고 결과를 IEnumerable로 반환하는 OrderBy
문입니다.
아직 큰 문제는 아니지만, 쿼리의 결과 (적절한 순서로 항목이 있음)를 참조하고 참조 된 리턴 콜렉션 (현재는 새로운 변수)을 재 지정하고 완료 할 수 있다고 생각했습니다. 작동하지 않지만 (순서는 작동하지만 데이터 소스 조작은 아님) 아무 것도 시각적으로 발생하지 않으며 변경도 없습니다.
LINQ Sort
을 사용하는 경우이 전체 절차는 .Sort
이 컬렉션의 항목을 직접 조작하기 때문에 완벽하게 작동합니다. 그러나 인스턴스 속성의 자식 사용 및 바운드 및 그 순전히 정렬 앞으로 정렬 때문에 정렬 식 반영하려면 반사 사용하고 있습니다. 여기 (How do I order a collection based on a child property using LINQ or a Lambda?)의 도움을 바탕으로 모든 정렬 작업이 가능하므로 .OrderBy
을 호출하지 않는 한 .Sort
을 사용할 수 없습니다. 내가 일한 다음없고, 그들 중 누구도 시도했다
Dim MyData As New List(Of MyCustomClass)
'Because objects are Reference types, setting RequestQueueData = e.ReturnValue means they will share the same memory address and any modifications to 'MyData will be reflected in 'e'.
MyData = e.ReturnValue
Dim query As IEnumerable(Of MyCustomClass) = MyData.OrderBy(blah,blah)
: 여기
는 ODS_Selected 이벤트에서 코드입니다MyData = query
... 그리고 시도 :
MyData = query.ToList()
.. 시도 :
MyData.Clear()
MyData.AddRange(query)
마지막으로 컬렉션을 지우고 query
결과에 9 개의 결과가 있더라도 .AddRange는 다시 아무것도로드하지 않습니다.
참조 유형 MyData
을 조작하여 주문을로드하거나 주문한 결과를 다시 할당하는 방법에 대한 아이디어가 있으십니까?
감사합니다.
편집 : 이것도 시도해보고 바인딩 된 Gridview의 데이터에는 아무런 변화가 없습니다. 재 할당 후 모음은 으로 완전이지만 아무 일도 발생하지 않습니다. 비 자식 인스턴스 속성을 테스트하기 위해 컬렉션에 .Sort
을 사용할 때만 원하는대로 작동합니다. .`OrderBy는 그냥 영구적으로 재 할당 후 완벽한 외모에도 불구하고 해당 모음을 수정되지 않습니다
Dim MyData2 As New List(Of MyCustomClass)
If query IsNot Nothing Then
For Each mc As MyCustomClass In query.ToList()
MyData2 .Add(req)
Next
End If
MyData = New List(Of BLL.Entities.Request)
'After this point, MyData & MyData2 are in the proper order.
MyData = MyData2
문제는 사용자 지정 클래스 일 수 있습니다. DataView를 사용해야 할 수도 있습니다. 여기에서 확인할 수 있습니다. http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx EDIT "MyCustomClass"에 대해 더 자세히 알려주면 다른 사람들이 당신을 도와 줄 수 있습니다. 사용자 정의 클래스가 무엇인지는 알 수 없습니다. – Tony318
아니, 네가 여기서 모든 거래를 놓친 것 같아. List (Of T)는 완벽하게 잘 묶을 것입니다. 강력하게 입력 된 및 기타 50 가지 이유 때문에 수년간 그리고 실제로 DataView IMO보다 더 잘 해왔습니다. .OrderBy를 사용하여 내 컬렉션을 조작하고 결과가있는 기본 데이터 소스를 조작하는 방법을 알아야합니다. – atconway