提问人:roy 提问时间:9/27/2022 最后编辑:roy 更新时间:9/27/2022 访问量:72
组合框中的 CellClick DataGridView 不会出现在 vb.net
The CellClick DataGridView in the combobox does not appear in the vb.net
问:
组合框中的 CellClick DataGridView 不会出现在 vb.net 中。
我的代码有问题吗? 我更新了我的代码,以便可以在代码中调整答案,因为我仍然对答案感到困惑
谢谢
'load database to datatable then to datagridview
Private Sub LoadData(Optional ByVal keyword As String = "")
Sql = "SELECT Auto_ID, First_Name, Last_Name, [First_Name] + ' ' + [Last_Name] AS Full_Name, Gender FROM TBL_SMART_CRUD " &
"WHERE [First_Name] + ' ' + [Last_Name] LIKE @keyword1 OR Gender = @keyword2 ORDER BY Auto_ID ASC"
Dim dt As DataTable = PerformCRUD(Cmd)
'update binding source
BindingSource1.DataSource = dt
With DataGridView1
.MultiSelect = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.AutoGenerateColumns = True
'update binding source
.DataSource = BindingSource1
.Columns(0).HeaderText = "ID"
.Columns(1).HeaderText = "First Name"
.Columns(2).HeaderText = "Last Name"
.Columns(3).HeaderText = "Full Name"
.Columns(4).HeaderText = "Gender"
End With
End Sub
'module AccessDb_Connection.vb
Public Function PerformCRUD(ByVal Com As OleDbCommand) As DataTable
Dim da As OleDbDataAdapter
Dim dt As New DataTable()
Try
da = New OleDbDataAdapter
da.SelectCommand = Com
da.Fill(dt)
Return dt
Catch ex As Exception
MessageBox.Show("An error occurred: " & ex.Message, "Perform CRUD OPERATIONS Failed. : Tutorial",
MessageBoxButtons.OK, MessageBoxIcon.Error)
dt = Nothing
End Try
Return dt
End
End Function
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Dim dgv As DataGridView = DataGridView1
If e.RowIndex <> -1 Then
IDTextBox.Text = Convert.ToString(dgv.CurrentRow.Cells(0).Value).Trim()
UpdateButton.Text = "UPDATE (" & Me.ID & ")"
DeleteButton.Text = "DELETE (" & Me.ID & ")"
FirstNameTextBox.Text = Convert.ToString(dgv.CurrentRow.Cells(1).Value).Trim()
LastNameTextBox.Text = Convert.ToString(dgv.CurrentRow.Cells(2).Value).Trim()
GenderComboBox.SelectedItem = Convert.ToString(dgv.CurrentRow.Cells(4).Value).Trim()
End If
End Sub
答:
0赞
John
9/27/2022
#1
您似乎正在将数据从数据库检索到 .在这种情况下,应将其绑定到各个控件。这样,在网格中选择一行会自动将同一行加载到各个控件中。您还应该将 a 添加到您的表单中并通过它进行绑定(如果尚未添加)。例如DataTable
DataGridView
DataTable
BindingSource
thingBindingSource.DataSource = thingDataTable
thingDataGridView.DataSource = thingBindingSource
stuffTextBox.DataBindings.Add("Text", thingBindingSource, "Stuff")
向控件添加绑定时,第一个参数是控件属性的名称,最后一个参数是源列/属性的名称。对于 ,您通常会绑定来自另一个表的数据并显示名称/描述并隐藏 ID,然后让 ID 填充另一个表中的外键列。这可能看起来像这样:ComboBox
With otherStuffComboBox
.DisplayMember = "Name"
.ValueMember = "ID"
.DataSource = referenceListDataTable
.DataBindings.Add("SelectedValue", thingBindingSource, "ForeignKeyColumn")
End With
听起来你没有这样做。听起来您只是在 中有一个列表,它们直接填充了另一个表。在这种情况下,您可以绑定到 而不是 .Strings
ComboBox
SelectedItem
SelectedValue
顺便说一句,如果要保存对数据库的更改,则应使用最初用于填充数据库的同一数据适配器保存所有更改。每次编辑行时,这些更改都存储在 .您可以根据需要浏览和编辑任意数量的行,并存储所有更改。要删除,您可以调用 并且该更改也会被存储。然后,可以调用数据适配器以批处理保存所有更改。DataTable
DataTable
RemoveCurrent
BindingSource
Update
评论
0赞
roy
9/27/2022
感谢您的回答,但我仍然对使用感到困惑,所以我更新了我的帖子中的代码,所以您可以从我的代码中自定义
0赞
John
9/27/2022
@user19530941,令人困惑的部分是什么?你有一个,你把它绑定到网格上。我告诉过你把它绑定到 a 上,然后把它绑定到网格上。我还告诉过你把它绑定到你的其他控件。我向你展示了如何做到这两点。究竟是什么让你对此感到困惑?DataTable
BindingSource
0赞
roy
9/27/2022
我已经用bindingsource更新了我的帖子中的代码,这是正确的
0赞
John
9/27/2022
@user19530941,请不要修改你的问题,让它不再问同样的事情。如果您需要更正错误,请这样做,否则,您应该添加信息而不是编辑它。
0赞
roy
9/27/2022
对不起,如果我错了,我在文本框中创建了这样的绑定代码。IDTextBox.DataBindings.Add("Text", BindingSource1, "Auto_ID")
评论
CellClick
DataGridView
TextBoxes
ComboBox