2015-04-23 36 views
0

我有一個datagridview(有5列:4個文本框和1個組合框),它從mysql加載數據。這是我使用的代碼,當我在所有文本框列中嘗試它時,它工作正常。但是,當我改變的最後一列到一個組合框,我得到了一個錯誤說:如何從mysql中填充datagridview組合框 - vb.net

「以下異常在DataGridView發生:

System.ArgumentException:的DataGridViewComboBoxCell值無效

要更換這個默認對話框請處理DataError事件。「

Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    sqlconn.ConnectionString = "server=localhost;userid=root;password=12345;database=db_scheduling" 
    teacherQuery("SELECT * FROM tbl_teacher ORDER BY id") 
End Sub 

Sub teacherQuery(ByVal strings) 
    Try 
     Dim sqlcommand As New MySqlCommand 
     Dim sqladapter As New MySqlDataAdapter 
     sqlcommand.Parameters.AddWithValue("@id", AddTeacher.txt_AddTeacher_ID.Text) 
     sqlcommand.Parameters.AddWithValue("@lname", AddTeacher.txt_AddTeacher_Lname.Text) 
     sqlcommand.Parameters.AddWithValue("@fname", AddTeacher.txt_AddTeacher_Fname.Text) 
     sqlcommand.Parameters.AddWithValue("@mname", AddTeacher.txt_AddTeacher_Mname.Text) 
     sqlcommand.Parameters.AddWithValue("@subject_to_teach", AddTeacher.cmb_AddTeacher_Subject.SelectedItem) 
     Dim Table As New DataTable 
     With sqlcommand 
      .CommandText = strings 
      .Connection = sqlconn 
     End With 
     With sqladapter 
      .SelectCommand = sqlcommand 
      .Fill(Table) 
     End With 

     '----HERES THE PROBLEM-----' 
     datagrid_Teacher.Rows.Clear() 
     For x As Integer = 0 To Table.Rows.Count - 1 
      datagrid_Teacher.Rows.Add(Table(x)("id"), 
             Table(x)("lname"), 
             Table(x)("fname"), 
             Table(x)("mname"), 
             Table(x)("subject_to_teach")) 
     Next 
     '---------------------------' 

     'Bold header 
     With datagrid_Teacher.ColumnHeadersDefaultCellStyle 
      .Font = New Font(datagrid_Teacher.Font, FontStyle.Bold) 
     End With 
    Catch ex As Exception 
     MessageBox.Show("ERROR: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 
End Sub 

編輯:在這裏的問題是在DataGridView添加數據(組合框(subject_to_teach列))

回答

0

嘗試此代替datagrid_Teacher.Rows.Add方式:

datagrid_Teacher.Datasource = Table; 
datagrid_Teacher.Databind(); 

替代地添加此您的代碼(用於GridView的Dataerror事件處理程序):

private void ctrldataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) 
     { 
      //do nothing 
     } 
+0

嘗試過了,它只是將數據裝載到datagridview的文本框。 –

+0

@LeeSong檢查更新後的答案。 –

+0

我沒有得到一個錯誤,但它不會從MySQL中加載數據(只在組合框列中) –

0

我管理d通過消除設計中的組合框列這樣做,並在代碼中添加組合框列,並修改了我的代碼到這個:

Sub teacherQuery(ByVal strings) 
    Try 
     Dim sqlcommand As New MySqlCommand 
     Dim sqladapter As New MySqlDataAdapter 
     sqlcommand.Parameters.AddWithValue("@id", AddTeacher.txt_AddTeacher_ID.Text) 
     sqlcommand.Parameters.AddWithValue("@lname", AddTeacher.txt_AddTeacher_Lname.Text) 
     sqlcommand.Parameters.AddWithValue("@fname", AddTeacher.txt_AddTeacher_Fname.Text) 
     sqlcommand.Parameters.AddWithValue("@mname", AddTeacher.txt_AddTeacher_Mname.Text) 
     sqlcommand.Parameters.AddWithValue("@subject_to_teach", AddTeacher.cmb_AddTeacher_Subject.SelectedItem) 
     sqlcommand.Parameters.AddWithValue("@search", "" + txt_TeacherSearch.Text + "%") 
     Dim Table As New DataTable 
     With sqlcommand 
      .CommandText = strings 
      .Connection = sqlconn 
     End With 
     With sqladapter 
      .SelectCommand = sqlcommand 
      .Fill(Table) 
     End With 
'---THIS IS WHAT I ADDED 
     Dim combo As New DataGridViewComboBoxColumn 
     Dim row As DataRow 

     With combo 
      For Each row In Table.Rows 
       .Items.Add(row.Item("subject_to_teach").ToString) 
       .Name = "Teaching Subject" 
      Next 
     End With 
     datagrid_Teacher.Columns.Add(combo) 
'----------------------- 
     datagrid_Teacher.Rows.Clear() 
     For x As Integer = 0 To Table.Rows.Count - 1 
      datagrid_Teacher.Rows.Add(Table(x)("id"), 
             Table(x)("lname"), 
             Table(x)("fname"), 
             Table(x)("mname"), 
             Table(x)("subject_to_teach")) 
     Next 

     'Bold header 
     With datagrid_Teacher.ColumnHeadersDefaultCellStyle 
      .Font = New Font(datagrid_Teacher.Font, FontStyle.Bold) 
     End With 
    Catch ex As Exception 
     MessageBox.Show("ERROR: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 
End Sub 

Private Sub datagrid_Teacher_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles datagrid_Teacher.DataError 
    'ERROR HANDLER 
End Sub