다른 것과 비슷한 Gridview 정렬에 문제가 있지만 데이터 테이블과 달리 컬렉션 개체에 바인딩됩니다.Winforms에서 ASP.NET 2.0 Webforms로 이동할 때 Gridview 정렬 문제가 발생했습니다.
응용 프로그램의 기존 비즈니스 규칙 및 데이터 액세스 계층은 개체가있는 패턴과 해당 형식의 개체 컬렉션이 필요한 경우 CollectionBase를 상속하고 IBindingList를 구현하는 다른 클래스를 갖습니다.
데스크톱 응용 프로그램의 경우 이러한 개체 중 하나에 대한 gridview를 쉽게 데이터 바인딩 할 수 있었으며 열 정렬을 설정하는 데 문제가 없었습니다. 데스크톱 앱의 프리젠 테이션 레이어에서 모든 것이 '상태'였습니다.
이제 코드가 새 웹 응용 프로그램 (ASP.NET 2.0, VB 코드 숨김 페이지)으로 이동됩니다.
전 컬렉션의 특정 열을 그리드 뷰에 표시하고 그리드 뷰를보기 만하면되는 것처럼 놀았습니다. '정렬 허용'을 켰을 때 문제가 나타났습니다.
. 소팅 방법 등을 사용하지 않는 것에 대한 오류가 발생했습니다.이 문제를 조사하면서 데이터 소스가 데이터 테이블 인 경우 데이터 테이블을 사용하면 쉽게 구현할 수있는 모든 종류의 솔루션을 발견했습니다. 하지만 그렇지 않습니다. 컬렉션입니다. 나는 XML 메모리 스트림으로 컬렉션을 변환하여 데이터 소스로 "값싼 샷"을 시도했지만 데이터 셋으로 .ReadXML을 다시 시도했지만 작동하지 않았다. [루트 요소가 누락되었습니다. 데이터 세트에있는 한 멀리있었습니다. ReadXml (ioTemp) 여기서 ioTemp는 xml serializer에서 사용되는 System.IO.MemoryStream입니다.]
이전 데스크톱 응용 프로그램 덕분에 그리드 뷰가로드 된 후에도 컬렉션을 정렬하는 것에 대해 걱정할 필요가 없었습니다. 사실 컬렉션의 .SortProperty, .SortDirection 및 .ApplySort는 모두 NotSupportedExceptions를 통해 '표준'입니다 (필자는 오랫동안 사라진이 프로그래머의 코드를 상속 받았다).
매번 데이터베이스로 돌아 가지 않고도 컬렉션을 데이터 테이블이나 컬렉션을 정렬하는 쉬운 방법으로 변환 할 수 있습니까? 객체 데이터 소스는 객체 작성 방법의 복잡한 규칙 때문에 작동하지 않습니다. VS2005의 마법사는 우리가해야 할 일 (객체를 만들기 위해 조건부로 여러 테이블에서 데이터를 가져 오는 것)을 처리 할 수 없습니다.
미리 감사드립니다.
ICompare는 간단한 정렬에 적합하지만이 경우는 그리드에서 클릭하는 모든 열을 정렬하기위한 것입니다. 거기에 이미 화면에있는 격자를 정렬하는 간단한 방법이 있어야합니다 ... – David
당신은 그렇게 생각하지만, 나는 Kaius가 불행히도 정확하다고 생각합니다. 내일 프로젝트 중 하나를 들여다 보려고 노력할 것입니다. – tbone