2010-03-05 3 views
1

나는이 글에서 주로 파생 된 솔루션을 사용하여는 바인딩에 바인딩 한 데이터 그리드가 포함 된 양식, .NET CF 응용 프로그램이 있습니다 http://msdn.microsoft.com/en-us/library/aa480736.aspx게시물 MouseUp DataGrid 변경!

나는 그래서 그것을 준비해 놓은 적이을 때 열 머리글 클릭하면 HitTest 정보를 얻고 유형을 확인합니다. Type이 ColumnHeader 인 경우 기본 BindingList (위에 게시 된 링크의 예제와 비슷한 코드 사용)에서 Sort를 시작합니다. 그러면 DataGrid가 내가 선택한 T 속성에 따라 정렬됩니다. 예 : 설명

이것은 아주 잘 작동합니다!

이제는 내 데이터 그릿 주위를 클릭 할 때 문제가 발생합니다. 정렬을 수행 한 후 두 행을 선택했다고 가정 해 봅니다. 행을 선택하지 않았습니다. 내가 1 행에있는 셀을 클릭하고 전체 행을 선택하는 코드가 있습니다 -이 작업이 발생하고 모두 잘됩니다. 이제 2 번 행을 클릭하면 2 번 행이 선택되고 모두 정상입니다. 그리드에는 여전히 내 정렬이 적용되어 있습니다. 이제 행 1을 다시 클릭하면 분류가 반대로되지만 중요하게 "ApplySort"메서드가 실제로 호출되지 않습니다. 무슨 일이 일어나고있는거야? 행 1을 클릭하면 그리드의 두 행이 효과적으로 반전됩니다. 행 2를 선택하면 발생하지 않습니다.

디버깅시 mousedown이 실행되고 (반환 문을 넣음) MouseUp이 실행되고 HitTest가 발생하고 columnheader가 클릭 된 경우 ApplySort가 호출되는 것을 볼 수 있습니다.이 경우에는 그렇지 않습니다. . MouseUp 이벤트를 떠난 후에 * 정렬 변경이 발생했음을 알았습니다. MouseDown/MouseUp이 끝난 후 어딘가에서 내 그리드 상태가 변경되는 것 같습니다.

내 생각에는 어떤 이벤트/동작이 내 그리드를 망칠 수 있습니까? 나는 기본적으로 ApplySort를 호출 한 후에 모든 것을 억제 할 수 있는지 알고 싶습니다.

답변

0

나는 이것에 대한 많은 대답을 기대하지 않지만 ... 나는 정렬 된 열이 서로 동일한 값을 가질 때만이 동작이 발생한다는 것을 눈치 챘다.

데이터가 다른 열은 문제가 발생하지 않습니다.

이렇게 잘 설계된 것 같습니다. 사용자가 클릭 한 내용을 기반으로 동적으로 열을 정렬하는 대신 고유 한 값을 포함하는 특정 id 속성에 대한 구현을 덜 일반화하고 정렬해야합니다. 내가 설명한 부작용이있을 수 있습니다.