Link to home
Start Free TrialLog in
Avatar of Lysi
Lysi

asked on

How to add ComboBox in a Windows DataGrid

Can somebody explain me (or give a web link) on how to add a ComboBox (Drop down list) in a datagrid in VB.NET windows form?

 
Thank You

Avatar of testn
testn

1. bind ur datagrid to a dataset
2. add a tablestyle to ur datagrid
3. add the columns u need to the datagrid
4. give me ur email address to send u the file datagridcomboboxcolumn or u can search for it on the internet
   Dim tblstyle As New DataGridTableStyle()
        With tblstyle
            .MappingName = "tablename"//table to which the datagrid is bound
            With .GridColumnStyles
                Dim product As New DataGridComboBoxColumn()
                product.comboBox1.DataSource =tablename1  //table in which u want to fill the combobox
                product.comboBox1.DisplayMember =filed1
                product.comboBox1.ValueMember = field2
                .Add(product)
                With .Item(index:=0)
                    .MappingName = fileldName //the field that is define in tablename
                    .HeaderText = "Product"
                    .Alignment = HorizontalAlignment.Left
                    .Width = 75
                    .NullText = String.Empty
                End With
'Add other columns
            End With
         end with
        DataGrid1.TableStyles.Add(tblstyle)
ASKER CERTIFIED SOLUTION
Avatar of razo
razo

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Imports System.Data.OleDb
Imports System.Windows.Forms

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "
#End Region

    Public MyCombo As New ComboBox()

    Dim sDBNAme As String = "c:\TestDB\Northwind.mdb"
    Dim sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDBNAme & ";Persist Security Info=False"
    Dim con As New OleDbConnection(sConn)
    Dim daEmp As New OleDbDataAdapter("Select * From Employees", con)

    Public ds As New DataSet()


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler MyCombo.TextChanged, AddressOf Ctrls_TextChanged
        'Fill ComboBox list.
        MyCombo.Name = "MyCombo"
        MyCombo.Visible = False
        MyCombo.Items.Clear()
        MyCombo.Items.Add("Sales Representative")
        MyCombo.Items.Add("Inside Sales Coordinator")
        MyCombo.Items.Add("Vice President, Sales")
        MyCombo.Items.Add("Sales Manager")
        MyCombo.Items.Add("Flunky")

        daEmp.Fill(ds, "Employees")

        'Set the RowHeight of the DataGrid to the height of the ComboBox.
        DataGrid1.PreferredRowHeight = MyCombo.Height

        DataGrid1.DataSource = ds

        DataGrid1.DataMember = "Employees"
        'Add ComboBox to the Control collection of the DataGrid.
        DataGrid1.Controls.Add(MyCombo)
    End Sub
    Private Sub DataGrid1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGrid1.Paint
        If DataGrid1.CurrentCell.ColumnNumber = 3 Then
            MyCombo.Width = DataGrid1.GetCurrentCellBounds.Width
        End If
    End Sub

    Private Sub Ctrls_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        If DataGrid1.CurrentCell.ColumnNumber = 3 Then
            MyCombo.Visible = False
            If DataGrid1.Item(DataGrid1.CurrentCell) & "" = "" Then
                SendKeys.Send("*")
            End If
            DataGrid1.Item(DataGrid1.CurrentCell) = MyCombo.Text
        End If
    End Sub

    Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
        If DataGrid1.CurrentCell.ColumnNumber = 3 Then
            MyCombo.Visible = False
            MyCombo.Width = 0
            MyCombo.Left = DataGrid1.GetCurrentCellBounds.Left
            MyCombo.Top = DataGrid1.GetCurrentCellBounds.Top
            MyCombo.Text = DataGrid1.Item(DataGrid1.CurrentCell) & ""
            MyCombo.Visible = True
        Else
            MyCombo.Visible = False
            MyCombo.Width = 0
        End If
    End Sub

    Private Sub DataGrid1_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Scroll
        MyCombo.Visible = False
        MyCombo.Width = 0
    End Sub

    Private Sub DataGrid1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Click
        MyCombo.Visible = False
        MyCombo.Width = 0
    End Sub

End Class