2016-08-12 2 views
0

DataTable의 콤보 상자에 대해 여러 열 드롭 다운 목록을 만들었으므로 이제 두 열을 함께 표시하려고합니다. 지금까지 단 하나의 열만 표시됩니다 (DisplayMember 속성 사용). 따라서 기본적으로 두 열을 모두 콤보 상자에 표시하여 자동 완성을 원합니다. 나는 두 번째 열을 콤보 상자 옆의 텍스트 상자에 표시하는 것에 만족할 것이지만, 선택한 인덱스가 변경되고 값이 변경되면 자동 완성으로 작동해야합니다. 두 Datable 값 (Name & 성)이 함께 다른 DB 테이블에 추가되고 사용자가 같은 위치에서 두 값을 모두 볼 수 있기 때문에 필요합니다.Combobox - 2 개의 Datatable 열 표시

편집 : 어떤 제안

Private Sub Combobox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles Combobox1.DrawItem 

     e.DrawBackground() 

     Dim drv As DataRowView = CType(Combobox1.Items(e.Index), DataRowView) 

     Dim id As String = drv("Name").ToString() 
     Dim name As String = drv("Surname").ToString() 

     Dim r1 As Rectangle = e.Bounds 
     r1.Width = r1.Width/2 


     Using sb As SolidBrush = New SolidBrush(e.ForeColor) 
      e.Graphics.DrawString(id, e.Font, sb, r1) 
     End Using 


     Using p As Pen = New Pen(Color.AliceBlue) 
      e.Graphics.DrawLine(p, r1.Right, 0, r1.Right, r1.Bottom) 
     End Using 


     Dim r2 As Rectangle = e.Bounds 
     r2.X = e.Bounds.Width/2 
     r2.Width = r2.Width/2 

     Using sb As SolidBrush = New SolidBrush(e.ForeColor) 
      e.Graphics.DrawString(name, e.Font, sb, r2) 
     End Using 

    End Sub 
:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

      Dim SQL As String = "SELECT ID,Name ||' ' || Surname as FullName from MyTable" 

      Dim dtb As New DataTable() 
      dtb.Columns.Add("Name", System.Type.GetType("System.String")) 
      dtb.Columns.Add("Surname", System.Type.GetType("System.String")) 

      Using con As OracleConnection = New OracleConnection("Data Source=MyDB;User Id=Lucky;Password=MyPassword;") 

       Try 

        con.Open() 

        Using dad As New OracleDataAdapter(SQL, con) 
         dad.Fill(dtb) 

        End Using 

        Combobox1.DataSource = dtb 
        Combobox1.DisplayMember = "FullName" 
        Combobox1.ValueMember= "ID" 
        con.Close() 

       Catch ex As Exception 
        'MessageBox.Show(ex.Message) 
       Finally 
        con.Dispose() 
       End Try 

      End Using 

     End Sub 

그리고 선 그리기 콤보 상자의 열 사이? 미리 감사드립니다 !!

+0

나는 이것을 사용하지 않았지만 어제 언급했다. http://www.codeproject.com/Articles/8619/Flat-MultiColumn-Combobox-with-Autocomplete – FloatingKiwi

+0

나는 이것을 allready에서 테스트 했으므로 제대로 작동하지 않는다. . 그 옆에, 내 솔루션은 잘 작동, 난 그냥 두 컬럼에 대한 자동 완성 싶어요. 내 이전 스레드 : http://stackoverflow.com/questions/38868261/flat-multi-column-combobox-filling-columns-with-db-tables – LuckyLuke82

+0

하하, 네 그것은 그것을 게시했다. 그들이 도서관에서 자동 완성을 시도한 방법을 보았습니까? – FloatingKiwi

답변

0

유일한 방법은 다른 콤보 상자를 추가하고 같은 데이터 테이블에 그를 결합하는 것입니다. 콤보 상자에서 항목을 선택하면 두 값이 모두 표시됩니다. 자동 완성 기능도 제공됩니다. 같은 콤보 박스에서 모든 것을하는 것은 좋지 않습니다, 표시되는 텍스트가 너무 넓어 보이지 않습니다.

0

체크 아웃이 답변 : https://stackoverflow.com/a/5570901/6550457

그것은 제안 : 모두를 달성하기

comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems; 
+0

먼저 VB.NET 초보자입니다. 이 자동 완성은 작동하지만, 그것을 .Suggest (으)로 변경했습니다. 두 번째로, 이것은 문제의 절반을 해결합니다 - 여전히 하나의 열만이 콤보 박스 (이름)에 표시됩니다. 콤보 상자에 "John Davies"와 같은 두 열을 어떻게 표시 할 수 있습니까? – LuckyLuke82

+0

2 개의 열이 필요합니까? 만약 당신이 'SELECT Name, Mythable from Surname'대신에'SELECT Name + '+ MyTable에서 성'을 쿼리하는 대신에 someones full name 인 경우. 그 너머 어떻게 할 지 모르겠다. – FloatingKiwi

+0

그리고 이것은 처음부터 다시 시작합니다. 좋아요, 말해 봐요. 어떻게 할 수 있겠어요? DB에 1 개의 테이블이 있고, 데이터를 입력하는 필드가 1 개 있습니다. 같은 테이블에서 이름과 성으로 문자열 (tehnician, 사용자, 개발자 및 관리자)으로 4 명의 직원을 입력해야합니다. 이제는 이름과 성을 모두 입력 할 수있는 사용자 친화적 인 양식을 개발하고 싶습니다. 그러나 이름과 성은 다른 테이블에 있기 때문에 combobox/datagrid/listview 등에서 선택해야합니다. 어떻게 그럴 수 있니? – LuckyLuke82