2010-01-08 1 views
4

몇 가지 속성이있는 사용자 지정 사용자 정의 컨트롤을 만들었습니다. 하나는 컨트롤에 액세스 할 데이터베이스를 지정합니다. 컨트롤의 사용자에게 컨트롤이 상호 작용할 데이터베이스를 선택할 수있는 드롭 다운을 제공 할 수 있기를 원합니다.사용자 지정 컨트롤에 대한 유효한 속성 값의 드롭 다운 목록 만들기

어떻게 작동시킬 수 있습니까? 기본값을 얻을 수는 있지만 선택 가능한 목록을 얻는 방법을 아직 알지 못했습니다.

도움이 필요합니다.

감사합니다. 마샬

답변

0

은 내 콤보에 대한 사용자 지정 데이터 소스를 만들 때 사용하는 템플릿입니다 :

Private Class Listing 

    Private _List As New ArrayList 

    Public Sub Add(ByVal ItemNumber As Integer, ByVal ItemName As String) 

     _List.Add(New dataItem(ItemNumber, ItemName)) 

    End Sub 

    Public ReadOnly Property List() As ArrayList 
     Get 
      Return _List 
     End Get 
    End Property 

End Class 

Private Class dataItem 
    Private _ItemNumber As Integer 
    Private _ItemName As String 

    Public Sub New(ByVal intItemNumber As Integer, ByVal strItemName As String) 
     Me._ItemNumber = intItemNumber 
     Me._ItemName = strItemName 
    End Sub 

    Public ReadOnly Property ItemName() As String 
     Get 
      Return _ItemName 
     End Get 
    End Property 

    Public ReadOnly Property ItemNumber() As Integer 
     Get 
      Return _ItemNumber 
     End Get 
    End Property 

    Public ReadOnly Property DisplayValue() As String 

     Get 
      Return CStr(Me._ItemNumber).Trim & " - " & _ItemName.Trim 
     End Get 

    End Property 

    Public Overrides Function ToString() As String 

     Return CStr(Me._ItemNumber).Trim & " - " & _ItemName.Trim 

    End Function 

End Class 

그리고 이것은 내가 그것을로드하는 방법입니다

ListBindSource = New Listing 

    Me.BindingSource.MoveFirst() 
    For Each Row As DataRowView In Me.BindingSource.List 
     Dim strName As String = String.Empty 
     Dim intPos As Integer = Me.BindingSource.Find("Number", Row("Number")) 
     If intPos > -1 Then 
      Me.BindingSource.Position = intPos 
      strName = Me.BindingSource.Current("Name") 
     End If 
     ListBindSource.Add(Row("Number"), strName) 
    Next 

    cboNumber.DataSource = ListBindSource.POList 
    cboNumber.DisplayMember = "DisplayValue" 
    cboNumber.ValueMember = "Number" 
    AddHandler cboNumber.SelectedIndexChanged, AddressOf _ 
      cboNumber_SelectedIndexChanged 

희망이 도움이됩니다. 한 가지 명심해야 할 것은 cboNumber에 이미 SelectedIndexchanged 이벤트에 할당 된 처리기가 있으면 문제가 발생한다는 것입니다. 따라서 기본 이벤트를 만들지 마십시오.

0

나는 당신의 문제에 대해 약간의 혼란을 해요.

사용자 정의 컨트롤에 DropDownList 컨트롤이 포함되어 있으면 사용자 정의 컨트롤 어딘가에 초기화하면됩니다.

가장 쉬운 방법은 Codebehind에서 usercontrol을 사용하는 것입니다. DropDownList.Items.Add() 또는 항목을 추가하기위한 구문이 무엇이든간에 할 수 있습니다.

+0

나는 사용자 콘트롤 자체에서 콤보 박스를 사용하는 것에 대해 이야기하지 않는다. 나는 그것을 컨트롤의 속성 상자에서 사용하는 것에 대해 이야기하고 있습니다. 유효한 값을 제한하려는 속성이 있습니다. 이전에 속성 페이지에서 드롭 다운을 본 적이 있었고 해당 동작을 복제하려고했습니다. – Marshall

3

속성에 TypeConverter를 연결하기 만하면됩니다. GetStandardValuesSupportedGetStandardValues ​​ 메서드 (어쩌면 GetStandardValuesExclusive도 가능)를 재정 의하여 표시 할 데이터베이스 목록을 반환합니다.

PropertyGrid 및 TypeConverter를 처음 사용하는 경우 여기에 document이 있습니다.

1

내가 생각했던 것보다 더 간단합니다.

속성에 열거 형을 설정했지만 속성 유형에 열거 형을 사용하는 데 문제가있었습니다. 그것은 수업 시간에 접근 할 수 없다고 말했다.

그때 나는 열렬한 환호를 받았고 Friend에서 Public으로 열거 형을 변경 한 다음 열거 형을 속성 유형으로 사용할 수있었습니다. 결과적으로 열거 형의 값은 컨트롤의 해당 속성 값을 볼 때 드롭 다운에 나열됩니다.

답장을 보내 주셔서 감사합니다. 여기 마샬

+0

콤보 상자에 권장 값을 표시하는 방법을 알면 내게 매우 중재 될 것입니다. 제 경우에는 데이터베이스에서 추출하고 싶습니다. – Larry

+0

나는 동적 인 가치를 원한다면 어떻게해야합니까? 값은 일부 클래스 파일에서 왔지만 그것을 열거 할 수는 없습니다. – Krunal

+0

감사합니다. 귀하의 답변이 도움이되었습니다. – Magnus