2011-03-03 3 views
5
에 데이터 그리드를 충돌

임은은 IList 및 INotifyCollectionChanged를 구현하는 사용자 정의는 RowCollection에 DataGrid.ItemsSource을 결합하려고 :사용자 지정 컬렉션 편집

VB에서 코드에 대한 죄송합니다

Public Class RowCollection(of T)
Implements IList(Of T)
Implements INotifyCollectionChanged
Private _List As New List(Of T)
...

(내가 번역됩니다 내 모든 코드를 곧 C#으로 바꿉니다.)

클래스 은 기존 CLR 컬렉션에서 파생되지 않습니다. 레코드 페이징을 구현하기 위해 GetItemAt를 재정의해야하기 때문에 직접 클래스를 만들었습니다. 컬렉션 내부적으로 개인 목록 _List에서 개체를 추가하고 제거합니다.

이제 DataGrid의 항목을 볼 수 있지만 편집 할 셀을 두 번 클릭하자마자 이 수신됩니다. InvalidOperationException : 'EditItems'를 사용할 수 없습니다..

제 질문은 내 컬렉션이 DataGrid와 완벽하게 호환되도록 구현해야하는 것입니다. 다음을 읽을 수

+0

+1 나는이 같은 문제를했지만, 내가 시간을하지했기 때문에 그것으로 파고 시도하지 않은 기억을 볼 수 있습니다. 내가 아는 한 ObservableCollection 을 ItemsSource로 사용하여 결국 내 컬렉션과 동기화됩니다. 나는 누군가가 해결책을 가지고 있는지 궁금해. – HCL

+0

나는 당신이하려는 일이 더 간단한 방법으로 이루어질 수 있다고 생각합니다. 기존 컬렉션을 사용하고 DataGridView를 가상 모드에두고 CellValueNeeded (object, ... CellEventArgs) 처리기를 구현합니다. 링크 : http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.virtualmode.aspx 가상 모드의 목적은 사용자가 염두에두고있는 종류의 페이징 시나리오를 지원하는 것입니다. –

+1

죄송합니다. WPF Toolkit에서 .Net 3.5 용 WPF DataGrid를 사용하여 Im을 언급하는 것을 잊어 버렸습니다. 언급 한 링크는 WinForms에 관한 것입니다. –

답변

2

Here :

편집 기본적으로

, 당신은 데이터 그리드에서 직접 항목 을 편집 할 수 있습니다. 을 편집 할 수 있고 이 올바르게 취소되도록하려면 DataGrid의 개체에 IEditableObject 인터페이스를 구현해야합니다. 또는 DataGrid에서 편집을 사용하지 않으려면 IsReadOnly 속성을 true로 설정할 수 있습니다.

IEditableObject 인터페이스는 here 는 또한 IEditableCollectionView here

관련 문제