Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datagrid视图vb.net中的组合框_C#_Wpf_Vb.net_Combobox_Datagrid - Fatal编程技术网

C# Datagrid视图vb.net中的组合框

C# Datagrid视图vb.net中的组合框,c#,wpf,vb.net,combobox,datagrid,C#,Wpf,Vb.net,Combobox,Datagrid,我知道这个问题太老了,被问了很多次,但我没有找到我想要的东西。 我曾经有一些组合框和文本框,用户将逐个填充和选择数据,在最后一个框上按enter键时,所有数据将作为新行添加到datagrid中。 现在我想让datagrid中的第一行替换所有这些框。 但是我已经被第一项卡住了 我希望第一列是一个组合框,但它根据我编写的查询从SQL数据库获取其值。在组合框中,我想键入我想搜索和选择的内容(作为普通组合框中的下拉样式) 类似于下面的代码,但用于datagridview中的组合框 Dim sqlqu

我知道这个问题太老了,被问了很多次,但我没有找到我想要的东西。 我曾经有一些组合框和文本框,用户将逐个填充和选择数据,在最后一个框上按enter键时,所有数据将作为新行添加到datagrid中。 现在我想让datagrid中的第一行替换所有这些框。 但是我已经被第一项卡住了

我希望第一列是一个组合框,但它根据我编写的查询从SQL数据库获取其值。在组合框中,我想键入我想搜索和选择的内容(作为普通组合框中的下拉样式)


类似于下面的代码,但用于datagridview中的组合框

 Dim sqlquery = " SELECT  m.accno,m.accname
              FROM masteraccount m
              where accname like '%TextBox3.Text%'
                    or accno like '%TextBox3.Text%'  "

        Using comm As SqlCommand = New SqlCommand(sqlquery, SQL.SQLCon)
            Dim rs As SqlDataReader = comm.ExecuteReader
            Dim dt As DataTable = New DataTable
            dt.Load(rs)
            ListBox1.DataSource = dt
            ComboBox1.DisplayMember = "acc"
            ComboBox1.ValueMember = "acc"

        End Using 

我根据你的要求更改了代码。当您从组合框中键入或选择一项时,它将填充其他单元格。这两种方法具有相同的功能。检查下面修改的代码

Private Sub FillComboBox()
    If cn.State = ConnectionState.Open Then cn.Close()
    cn.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Juan\Documents\NorthwindSample.accdb;Persist Security Info=False;"
    cn.Open()

    cmb.Name = "cmb"
    cmb.HeaderText = "Employee"

    'query that retrieves all the employee names
    Dim sqlquery As String = "Select [last name] & ' ' &  [first name] as Name " &
             "From employees order by [last name]"

    'add the query results to the combobox cell in datagridview
    Using comm As OleDbCommand = New OleDbCommand(sqlquery, cn)
        Dim rs As OleDbDataReader = comm.ExecuteReader
        dtable = New DataTable
        dtable.Load(rs)
        cmb.DataSource = dtable
        cmb.DisplayMember = dtable.Columns.Item(0).ColumnName
        cmb.ValueMember = dtable.Columns.Item(0).ColumnName
        DataGridView1.Columns.Add(cmb)
    End Using

    'create other columns
    CreateColumns()
End Sub
'Procedure to fill the other cells
Sub FillCells(cmbValue As String, conn As OleDbConnection)

    'query that retrieves the rest of the fields that matches with the combobox value
    Dim sqlquery2 As String = "Select [Last Name] & ' ' & [First Name] as Name, [e-mail address], [job title], city 
          From employees
    Where [Last Name] & ' ' & [First Name] = '" & cmbValue & "'"

    'Assigns query results to datatable 
    Using comm2 As OleDbCommand = New OleDbCommand(sqlquery2, conn)
        Dim rs As OleDbDataReader = comm2.ExecuteReader
        Dim dt As DataTable = New DataTable
        dt.Load(rs)

        'creates a datarow for the datatable
        Dim dtRow As DataRow

        Dim email As String = ""
        Dim jobtitle As String = ""
        Dim city As String = ""

        'assigns datarow items to variables

        For Each dtRow In dt.Rows

            dtRow.Field(Of String)(dt.Columns.Item(1))
            email = dtRow.Item(1)
            jobtitle = dtRow.Item(2)
            city = dtRow.Item(3)

        Next

        'assigns the index of the current row to the variable
        Dim currentRow As Integer

        currentRow = DataGridView1.CurrentRow.Index

        'fills the cells with the values
        DataGridView1.Item(1, currentRow).Value = email
        DataGridView1.Item(2, currentRow).Value = jobtitle
        DataGridView1.Item(3, currentRow).Value = city
        dt = Nothing
    End Using

End Sub

Private Sub DataGridView1_EditingControlShowing(sender As Object, 
        e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

    'REMEMBER TO CHANGE THE COLUMN INDEX NUMBER TO YOUR COMBOBOX INDEX!!
    If DataGridView1.CurrentCell.ColumnIndex = 0 Then
        Dim combo As ComboBox = CType(e.Control, ComboBox)
        combo.DropDownStyle = ComboBoxStyle.DropDown

        If (combo IsNot Nothing) Then
            ' Remove an existing event-handler, if present, to avoid adding multiple handlers when the editing control is reused.
            RemoveHandler combo.SelectionChangeCommitted, New EventHandler(AddressOf ComboBox_SelectionChangeCommitted)
            RemoveHandler combo.TextChanged, New EventHandler(AddressOf ComboBox_TextChanged)
            RemoveHandler combo.KeyDown, New KeyEventHandler(AddressOf ComboBox_KeyDown)

            ' Add the event handler.
            AddHandler combo.SelectionChangeCommitted, New EventHandler(AddressOf ComboBox_SelectionChangeCommitted)
            AddHandler combo.TextChanged, New EventHandler(AddressOf ComboBox_TextChanged)
            AddHandler combo.KeyDown, New KeyEventHandler(AddressOf ComboBox_KeyDown)
        End If
    End If
End Sub

Private Sub ComboBox_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim combo As ComboBox = CType(sender, ComboBox)
    FillCells(combo.Text, cn)
End Sub
Private Sub ComboBox_TextChanged(sender As Object,
                 e As EventArgs)
    Dim combo As ComboBox = CType(sender, ComboBox)
    FillCells(combo.Text, cn)
End Sub

Private Sub ComboBox_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
    Select Case (e.KeyCode)
        Case Keys.Tab
            e.Equals(Keys.Return)
    End Select
End Sub

您必须添加一列作为组合框。我相信你可以在stackoverflow.com上找到足够多的示例。是的,有,但是没有人告诉我如何准确地处理sql关系。谢谢,它比其他代码工作得更好,但仍然无法通过combobox进行搜索。如果您有1000名员工,我想根据我的类型(检索所有员工姓名的查询)显示他们。sqlquery为String=“选择[last name]和[first name],其中[firstname]类似于'combobox.text%””