2009-09-15 5 views
0

그래서 내가 동의 할 내 데이터 그리드에서 매우 표준이 아닌 일종의을 구현하는 몇 가지 요구 사항, 그리드는 현재 원래 행 데이터 행 필터 세트와 DataView를 바인딩 된 데이터가 실시간으로 제공이 매 초마다 타이머를 변경하여 기본 데이터 테이블에서 변경 한 내용을 표시합니다. 그리드는 읽기 전용이며, 순전히 실시간 데이터를 표시합니다.C# 사용자 지정 DataView를

은 간결 난 정렬의 세부 사항을 건너 뛸 수 있습니다. 이 문제를 해결하기 위해 원본 데이터로 DataView를 사용하는 사용자 지정 데이터보기 (읽기 전용)를 구현하여 행 상태를 필터링하고 실시간 데이터의 가상 눈금 패턴을 유지할 수있게했습니다. 이 콜렉션/데이터보기는 그리드에 바인딩 될 수 있습니다. 내 문제는 기본 데이터보기의 변경 내용으로 사용자 지정 데이터보기의 내부 컬렉션을 업데이트 된 상태로 유지하는 것입니다. 처음에는 기본 데이터보기의 ListChanged 이벤트를 청취하려고했지만 기본 데이터 테이블에 행을 하나만 추가하고 변경 사항을 수락하더라도 Reset 이벤트 유형을 사용하여 전체 컬렉션을 새로 고쳐야했습니다. 단일 행에 대한 업데이트로 인해 수천 개의 행이 새로 고쳐지고 다시 정렬됩니다.

누구든지 이전에이 경험이 있습니까? 그리드 어떻게하는지 궁금하네요, 만약 당신이 데이터 테이블을 실제로 그것 자체가 테이블의 기본보기에 바인딩의 그래서 데이터 그리드의 전체 컬렉션을 다시로드하는 것을 의미합니다 데이터 테이블을 그것도 볼 수있다. 단일 행 업데이트?

죄송합니다.

당신이 사용하고있는 그리드의 유형에 따라

감사 아드리안

답변

0

... 대안을 설계 심지어 어떤 입력, 해결 방법을 음미하거나하는 것은, 그 그리드의 내장을 사용하는 간단한 작업이 될 수 있습니다 이 도로를 내려 가기보다는 커스텀 정렬 (있을 경우) 기능을 제공합니다.

말했다되는 것을 항상 DataTableAcceptChanges를 호출 뒤에 이유는 무엇인가? 할 것이다 모든 필터링하고 활성 RowStateFilter을하지 않는 한 당신이 사용하고있는 DataView을 통해 분류되고 있는지에 영향을주지해야한다 Original에 모든 행에 RowState을 설정한다. 당신이 AcceptChanges에 대한 호출을 가지고가는 경우에 (당신은 오히려 DataTable 자체보다, 개별 DataRow에 전화를해도 이상)

, 당신은 ListChanged을 사용할 수 있어야합니다. 사용자는 그들이을 선택할 수있는 데이터가 패션 "에 의해 그룹의"으로 정렬하고자하는 분류를 요약 -

+0

음, 정렬은 내가 아직 같은 기능을 제공하는 모든 그리드를 볼 havent 한, 비트 proprietry입니다 컬럼별로 그룹화하고, 주어진 조건에 따라 정렬하기위한 컬럼을 먼저 만족시킵니다. 조건을 만족하지 않는 모든 로우는 간단한 멀티 컬럼 비교자를 사용하여 정렬됩니다. 이는 행 그룹을 비교해야한다는 것을 의미합니다. 어떤 종류의 커스텀 데이터 뷰가이를 처리합니다. 생각이 사용자 정의 데이터 뷰를 연결할 수 있습니다되도록 우리가 실시간으로 업데이트 된 데이터를 표시 할 때 –

+0

우리는 그리드 및 일부 데이터 DataViewRowState.OriginalRows와 DataTable을 사이에 DataView를이 때 AcceptChanges가 호출이 일반적으로 사용된다, 우리는 거의 항상 DataViews를 사용 이 정렬을 사용하려면 데이터 뷰와 표 사이에서 내가 아는 유일한 방법은 DataView 대신 DataTable을 사용하는 것이지만 많은 응용 프로그램에 필요한 DataViewRowState를 사용하는 옵션을 얻지 못합니다. 내 데이터보기에서 DataViewRowState를 어떻게 활용할 수 있습니까? –

+0

설명하는 * 특정 * 정렬 기능을 제공하는 그리드가 없습니다.그러나 많은 경우 그리드가 있습니다 (DataGridView는 내가 아는 한 그 사이에 있지는 않지만) 사용자에게 일반적으로 이벤트 모델을 통해 적합하다고 판단되는 방식으로 정렬 할 수있는 기능을 제공합니다. 일반적으로 그리드는 이벤트를 발생시키고 두 행을 전달하며 표준 비교 값 (-1, 0 또는 1)을 반환하여 그리드의 행을 비교합니다. DataRowState.Original 이외의 다른 행을 표시하지 않는 ** 특별한 이유가 있습니까? –

관련 문제