组合框中的 CellClick DataGridView 不会出现在 vb.net

The CellClick DataGridView in the combobox does not appear in the vb.net

提问人:roy 提问时间:9/27/2022 最后编辑:roy 更新时间:9/27/2022 访问量:72

问:

组合框中的 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

字符串集合编辑器 cellclick

vb.net 事件 DataGridView ComboBox

评论

0赞 John 9/27/2022
请解释一下你真正想要实现的目标。我怀疑处理该事件不是最好的解决方案,即使它确实像您预期的那样工作。CellClick
0赞 roy 9/27/2022
@John,您可以看到我附加的 screeshot,它在文本框中出现,但仅在组合框中没有出现
0赞 roy 9/27/2022
@John,我已经删除了最佳解决方案,所以在这里我只想出现在组合框中
0赞 John 9/27/2022
我再说一遍,请解释一下你真正想要实现的目标。你的评论都没有做到这一点。我要求您详细描述此代码应该实现的确切功能。首先,可以使用键盘或鼠标执行许多操作,这就是为什么专门对点击做出反应通常不是正确的做法。请用对问题的完整和清晰的解释来更新问题,其中始终包括对您试图实现的目标的解释,而不仅仅是您试图实现它的方式。
0赞 John 9/27/2022
好吧,我想我明白你想做什么。当用户选择某一行时,您希望该行中的单元格值可在多个离散控件(包括 和 .这是对的吗?如果是这样,那么你应该使用数据绑定,在这种情况下,你根本不需要任何代码。如果你能确认这是你想要的,我会发布一个答案。DataGridViewTextBoxesComboBox

答:

0赞 John 9/27/2022 #1

您似乎正在将数据从数据库检索到 .在这种情况下,应将其绑定到各个控件。这样,在网格中选择一行会自动将同一行加载到各个控件中。您还应该将 a 添加到您的表单中并通过它进行绑定(如果尚未添加)。例如DataTableDataGridViewDataTableBindingSource

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

听起来你没有这样做。听起来您只是在 中有一个列表,它们直接填充了另一个表。在这种情况下,您可以绑定到 而不是 .StringsComboBoxSelectedItemSelectedValue

顺便说一句,如果要保存对数据库的更改,则应使用最初用于填充数据库的同一数据适配器保存所有更改。每次编辑行时,这些更改都存储在 .您可以根据需要浏览和编辑任意数量的行,并存储所有更改。要删除,您可以调用 并且该更改也会被存储。然后,可以调用数据适配器以批处理保存所有更改。DataTableDataTableRemoveCurrentBindingSourceUpdate

评论

0赞 roy 9/27/2022
感谢您的回答,但我仍然对使用感到困惑,所以我更新了我的帖子中的代码,所以您可以从我的代码中自定义
0赞 John 9/27/2022
@user19530941,令人困惑的部分是什么?你有一个,你把它绑定到网格上。我告诉过你把它绑定到 a 上,然后把它绑定到网格上。我还告诉过你把它绑定到你的其他控件。我向你展示了如何做到这两点。究竟是什么让你对此感到困惑?DataTableBindingSource
0赞 roy 9/27/2022
我已经用bindingsource更新了我的帖子中的代码,这是正确的
0赞 John 9/27/2022
@user19530941,请不要修改你的问题,让它不再问同样的事情。如果您需要更正错误,请这样做,否则,您应该添加信息而不是编辑它。
0赞 roy 9/27/2022
对不起,如果我错了,我在文本框中创建了这样的绑定代码。IDTextBox.DataBindings.Add("Text", BindingSource1, "Auto_ID")