我正在創建一個添加學生視窗表單,它包含兩個組合框。第一個包含學生的學期,第二個包含基于學期值的課程代碼。我面臨的問題是我也有一個datagridview,我想用課程代碼表中包含的學生資料填充它,只要我點擊課程代碼組合框更改的學期組合框值,只要它改變,我想加載 datagridview 的資料,但它顯示的錯誤基本上是無法將資料行轉換為字串,但是當我使用 ComboBox1.ValueMember 并在單擊按鈕上加載 datagridview 時,它作業正常。但是當我在組合框更改上加載 datagridview 時,它顯示錯誤。
此代碼作業正常
Imports System.Data.OleDb
Public Class AddStudent
Dim con As New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\Students.accdb")
Dim con1 As New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\Users.accdb")
Private Sub AddStudent_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
con.Open()
Dim cmd As New OleDbCommand("Select stud_roll From " ComboBox1.SelectedValue " where stud_roll = @roll1", con)
cmd.Parameters.AddWithValue("roll1", TextBox2.Text)
Dim myreader As OleDbDataReader = cmd.ExecuteReader
If myreader.Read() Then
con.Close()
MessageBox.Show("Student Inserted before")
Else
con.Close()
Dim cmd1 As New OleDbCommand("Insert into " ComboBox1.SelectedValue "(stud_roll,stud_name,date_of_birth,course,gender,mobile_no,semester) Values(@roll,@name,@dob,@course,@gender,@mobile,@semester)", con)
cmd1.Parameters.AddWithValue("roll", Convert.ToInt32(TextBox2.Text))
cmd1.Parameters.AddWithValue("name", TextBox1.Text)
cmd1.Parameters.AddWithValue("dob", DateTimePicker1.Value.Date)
cmd1.Parameters.AddWithValue("course", ComboBox1.SelectedValue)
cmd1.Parameters.AddWithValue("gender", ComboBox2.SelectedItem)
cmd1.Parameters.AddWithValue("mobile_no", MaskedTextBox1.Text)
cmd1.Parameters.AddWithValue("semester", Convert.ToInt32(ComboBox3.SelectedItem))
con.Open()
cmd1.ExecuteNonQuery()
con.Close()
MessageBox.Show("Records inserted successfully")
End If
con.Open()
Dim cmd3 As New OleDbCommand("Select stud_roll, stud_name, date_of_birth, course, gender,mobile_no, semester From " ComboBox1.SelectedValue "", con)
Dim da As New OleDbDataAdapter
da.SelectCommand = cmd3
Dim dt As New DataTable
dt.Clear()
da.Fill(dt)
DataGridView1.DataSource = dt
con.Close()
End Sub
Private Sub Label8_Click(sender As Object, e As EventArgs) Handles Label8.Click
AddTeacher.Show()
End Sub
Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged
con1.Open()
Dim cmd As New OleDbCommand("Select course_code From courses Where semester= " ComboBox3.SelectedItem "", con1)
Dim da As New OleDbDataAdapter
da.SelectCommand = cmd
Dim dt As New DataTable
dt.Clear()
da.Fill(dt)
ComboBox1.DataSource = dt
ComboBox1.DisplayMember = "course_code"
ComboBox1.ValueMember = "course_code"
con1.Close()
End Sub
Private Sub Label14_Click(sender As Object, e As EventArgs) Handles Label14.Click
Courses.Show()
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
End Sub
End Class
當我像這樣更改組合框后加載時,它顯示錯誤:- System.InvalidCastException: 'Operator ' ' is not defined for string "Select stud_name, stud_roll From" 并輸入 'DataRowView'。這是因為 datarowview 型別轉換
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
con.Open()
Dim cmd3 As New OleDbCommand("Select stud_roll, stud_name, date_of_birth, course, gender,mobile_no, semester From " ComboBox1.SelectedValue "", con)
Dim da As New OleDbDataAdapter
da.SelectCommand = cmd3
Dim dt As New DataTable
dt.Clear()
da.Fill(dt)
DataGridView1.DataSource = dt
con.Close()
End Sub
請幫我解決一下這個。
uj5u.com熱心網友回復:
1.確保給控制元件起有意義的名字:它會讓你的生活更輕松。“ComboBox1”不是一個有意義的名稱;)
2.不要創建重復使用的資料庫連接的單個實體:您應該創建連接物件,使用它,然后處理它。幕后有一些機制可以提高效率(連接池)。在我以前的答案中有一個如何做到這一點的例子。
3.您不需要打開和關閉連接da.Fill(dt):它會自動完成。
4.因為ComboBox1.SelectedValue來自資料表,您需要提取該資料行視圖的列,例如:
Dim tableName = DirectCast(ComboBox1.SelectedItem, DataRowView).Row.Field(Of String)("course_code")
Dim cmd3 As New OleDbCommand("Select stud_roll, stud_name, date_of_birth, course, gender,mobile_no, semester From [" & tableName & "]", con)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/415368.html
標籤:
上一篇:在VB.NET中,有沒有辦法將未更改單元格的DataGridViewComboBox下拉串列更改為新的串列陣列,同時保留更改的單元格?
