2013-12-15 3 views
1

몇 가지 콤보 상자 열이있는 DGV가 있습니다. 이러한 열은 기본적으로 데이터베이스의 조회 항목 인 객체에 바인딩됩니다. 내 사용자가 해당 조회 항목을 적용 할 수있는 곳에 NULL로 설정하는 빈 옵션을 제공하고 싶습니다. 사용자가 빈 값을 선택할 수 있도록 Null 항목을 목록에 추가하는 다양한 방법을 시도했지만 작동하지 않는 것 같습니다.DataGridViewComboBoxCell 빈 값

내 목록을 컨트롤에 바인딩하고 Ctrl + 0을 누르지 않고도 null 값을 입력 할 수있게하는 가장 좋은 방법이 있습니까?

Public Class RootItem 
    Public Overridable Property Lookup 
    Public Overridable Property Type as String 
    Public Overridable Property Active as Boolean 
End Class 

Public Class LookupItem 
    Public Overridable Property ID As Integer = -1 
    Public Overridable Property Abbreviation As String = "" 
    Public Overridable Property Name As String = "" 
    Public Overridable Property Description As String = "" 

    Public Overrides Function ToString() As String 
     Return Abbreviation 
    End Function 

    Public Overridable ReadOnly Property Self 
     Get 
      Return Me 
     End Get 
    End Property 
End Class 

' My databinding 
' ... 
private rootItems as IList(of RootItem) = session.QueryOver(of RootItem).List 

Private lookups As IList(Of LookupItem) = session.QueryOver(Of LookupItem).List 

With LookupItemColumn 
    .DataSource = lookupItems 
    .DataPropertyName = PropUtil.GetName(Of RootItem)(Function(x) x.LookupItem) 
    .DisplayMember = PropUtil.GetName(Of LookupItem)(Function(x) x.Abbreviation) 
    .ValueMember = PropUtil.GetName(Of LookupItem)(Function(x) x.Self) 
End With 

myDgv.DataSource = New SortableBindingList(Of RootItem)(rootItems) 
+0

"null 항목"을 드롭 다운 소스에 추가하는 것은 옵션이 아닙니까? –

+0

이 작업을 수행했지만 바인딩이 제대로 작동하지 않으며 드롭 다운에 항목이 표시되지 않습니다. – Origin

+0

모델에서 null을 허용하지 않기 때문에 생각할 수있는 유일한 방법은 맞춤 'DataGridViewComboBoxColumn'을 만드는 것입니다. –

답변

0

이 문제의 해결책은 ComboBoxes에 바인딩 한 모든 항목에 LookupItem 인터페이스를 구현하는 것이 었습니다.

이렇게 바인딩 할 항목 목록을 가져 와서 "더미"항목을 추가했습니다.

CellValueChanged 이벤트를 처리하고 일부 리플렉션을 사용하여 편집중인 열이 ComboBoxColumn인지 검색하고, 그렇다면 열이 바인딩 된 속성을 가져 와서 값이 맞는지 알아 봅니다. 이제는 내 더미 항목 (빈 ID를 사용하여 이것을 결정했습니다)으로 설정되었습니다. 빈 항목 인 경우 해당 속성의 값을 다시 반사를 사용하여 Null로 설정합니다. 이렇게하면 사용자는 쉽게 속성을 null로 설정할 수 있으며 내 개체는 데이터베이스에 올바르게 보존됩니다. LookupItem 인터페이스 만 구현하면되기 때문에 더 많은 열을 추가하는 것도 그리 어렵지 않습니다.