2016-10-10 4 views
0

콤보 박스에서 라인별로 분리 된 내 DB의 2 개의 테이블 값을 표시하기 위해 DataGrid에 다중 컬럼 콤보 박스가 필요합니다. 난 allready 입력 및 Draw_Item 이벤트와 함께 정상적인 콤보 상자를 사용 하여이 일을했습니다 지금은 DataGrid 에서도이 일을하려고 해요 - Cell_Enter 및 Cell_Painting 이벤트. DataViewrow 설정하려고 할 때 문제가 발생합니다 - "인덱스가 DatagridView의 멤버가 아닙니다 ..."오류가 발생합니다. 여기 내 코드는 다음과 같습니다.Datagridview - 멀티 컬럼 콤보 박스

Private Sub MyDGV_CellEnter(sender As Object, e As DataGridViewCellEventArgs) Handles MyDGV.CellEnter 
     If e.ColumnIndex = 0 Then 

      Dim SQL As String = "SELECT Field1,Field2 from MyTable" 
      Dim dtb As New DataTable() 
      dtb.Columns.Add("Field1", System.Type.GetType("System.String")) 
      dtb.Columns.Add("Field2", System.Type.GetType("System.String")) 

      Try 
       Myconn() 'My connection to Oracle 
       Using dad As New OracleDataAdapter(SQL, Myconn) 
        dad.Fill(dtb) 
       End Using 
       Column1.DisplayMember = "Field1" 
       Column1.DataSource = dtb 

      Catch ex As Exception 
       MessageBox.Show(ex.Message) 
      Finally 
       Myconn.Close() 
      End Try 
     End If 

End Sub 

    Private Sub MyDGV_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles MyDGV.CellPainting 

     If e.ColumnIndex = 0 Then 

      Dim drv As DataRowView = CType(Column1.Items(e.Index), DataRowView) 'I have error here - this line should get value of each row 

      Dim id As String = drv("Field1").ToString() 
      Dim name As String = drv("Field2").ToString() 

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

      Using sb As SolidBrush = New SolidBrush(MyDGV.BackColor) 
       e.Graphics.DrawString(id, e.CellStyle.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.CellBounds 
      r2.X = e.CellBounds.Width/2 
      r2.Width = r2.Width/2 

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

     End If 

    End Sub 

어떤 도움을 많이 주셨습니다!

답변

0

DataGridViewCellPaintingEventArgs Class의 회원을 확인하십시오. 나는 rowIndex에 속성을 활용하려고 할 것입니다 :

Dim drv As DataGridViewRow = CType(MyDGV.Rows(e.RowIndex), DataGridViewRow) 

는 그런 다음 셀 속성을 참조하여 필요한 값을 얻을 필요가 있습니다

Dim id As String = drv.Cells("Field1").Value.ToString() 
Dim name As String = drv.Cells("Field2").Value.ToString() 
+0

는 사실은 여기에 게시하기 전에이 작업을 시도했다. 작동하지 않습니다 - "DataGridViewRow 형식의 값을 DataRowView로 변환 할 수 없습니다"오류가 발생했습니다. – LuckyLuke82

+0

감사를 반영하도록 업데이트했습니다. – N0Alias

+0

@ 별칭으로, 이제 오류가 발생합니다 : "음수가 아니고 컬렉션의 크기보다 작아야합니다". 콤보 상자가 채워지기 전에 DatagridViewCellPaintingEventArgs가 발생합니다. 이것을 바꿀 수 있습니까? ... Cell_Enter 코드를 Form_Load로 변경하려고했으나 여전히 동일합니다. – LuckyLuke82