How to pass Datagridview Combobox cell as a parameter to a function

Posted on 2009-04-06
Last Modified: 2012-05-06
I have a datagridview that contains many combobox that will be bound to different sources.  I want to pass the combobox object of a cell in the datagrid to a function as a parameter.  What is the syntax to do so?
Question by:KentDBerry
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
LVL 10

Expert Comment

ID: 24078887

Just for clarification, are you looking to pass the "Value" of the combo box to a function?


LVL 48

Accepted Solution

jpaulino earned 500 total points
ID: 24078927
If you have a datasource for that comboboxes you can use that.
Maybe you can use a DataView for that ...

Dim dgvCombo As DataGridViewComboBoxCell = DirectCast(Me.DataGridView1(<Column Name or Index>, <Row Number>), DataGridViewComboBoxCell) 
Dim dv As DataView = DirectCast(dgvCombo.DataSource, DataView) 

Open in new window


Author Comment

ID: 24078963
No.  I want to pass the object.   I have an existing function that I use to populate combo boxes in general and I am trying to tap into it as shown below.
            For Each row As DataGridViewRow In .Rows
                For i As Integer = 1 To 10
                    Bind_Object_To_DataSource(<reference combobox object here>, .Item("AnswerTypeID", row.Index).Value, IIf(.Item(Trim(Str(i)), row.Index).Value Is DBNull.Value, 0, .Item(Trim(Str(i)), row.Index)))
                    '                    Bind_Object_To_DataSource(.Item(i, row.Index), .Item("AnswerTypeID", row.Index).Value, .Item("A" & Trim(Str(i)) & "_AnswerID", row.Index).Value)
    Public Sub Bind_Object_To_DataSource(ByVal cb As Object, ByVal AnswerTypeID As Integer, ByVal AnswerID As Integer)
        Dim conn As New SqlConnection(My.Settings.ConnectionString)
        Dim sql As String = ""
            Dim sYear As String = ""
            If cb.Name <> "cbYear" Then
                If Me.cbYear.Text = "" Then
                    sYear = Year(Now()).ToString 'Trim(Me.cbYear.SelectedValue.ToString)
                    Me.cbYear.SelectedText = sYear
                        sYear = Trim(Me.cbYear.SelectedValue.ToString)
                    Catch ex As Exception
                        sYear = ""
                    End Try
                End If
            End If
            Select Case cb.Name
                Case "cbYear"
                    sql = "SELECT YR as Code, rtrim(str(YR)) as Description FROM BRDWorkslates.dbo.tblEFF_NAFTA_WORKSLATE_REPORT GROUP BY YR HAVING (YR is not Null) and (YR >= 2008) and (YR < 2090) Order by YR DESC"
                Case "cbScientist"
                    sql = "SELECT Researcher as Code, Researcher as Description FROM BRDWorkslates.dbo.tblEFF_NAFTA_WORKSLATE_REPORT Where YR = '" & sYear & "' GROUP BY Researcher HAVING Researcher is not null Order by Researcher ASC"
                Case "cbTrialNumber"
                    sql = "SELECT Trial_NO as Code, Trial_NO as Description FROM BRDWorkslates.dbo.tblEFF_NAFTA_WORKSLATE_REPORT Where YR = '" & sYear & "' and Researcher = '" & Trim(Me.cbScientist.SelectedValue) & "' GROUP BY Trial_NO HAVING Trial_NO is not null Order by Trial_NO ASC"
                Case Else ' combo boxes for data entry
                    sql = "Select AnswerID as Code, Option as Description FROM tblAnswerTypesAndOptions where AnswerTypeID = " & Str(AnswerTypeID)
            End Select
            Dim DA As New SqlDataAdapter(sql, conn)
            Dim DS As New DataSet
            DA.Fill(DS, "Codes")
            Dim dt As New DataTable
            dt.Columns.Add("Description", GetType(System.String))
            dt.Columns.Add("Code", GetType(System.String))
            Dim drDSRow As DataRow
            Dim drNewRow As DataRow
            For Each drDSRow In DS.Tables("Codes").Rows
                drNewRow = dt.NewRow
                drNewRow("Description") = drDSRow("Description")
                drNewRow("Code") = drDSRow("Code")
            With cb
                .DataSource = dt
                .DisplayMember = "Description"
                .ValueMember = "Code"
                .AutoCompleteMode = AutoCompleteMode.Suggest
                .AutoCompleteSource = AutoCompleteSource.ListItems
                .DropDownStyle = ComboBoxStyle.DropDown
                '                .DataBindings.Add(New Binding("SelectedValue", dt, "Code"))
                Select Case cb.Name
                    Case "cbYear"
                        cb.SelectedValue = My.Settings.Year
                    Case "cbScientist"
                        cb.SelectedValue = My.Settings.Scientist
                    Case "cbTrialNumber"
                        cb.SelectedValue = My.Settings.TrialNumber
                    Case Else
                        cb.SelectedValue = AnswerID
                End Select
            End With
        Catch ex As Exception
        End Try
    End Sub

Open in new window

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

LVL 48

Expert Comment

ID: 24079002
Then you can use the dgvCombo from the example I have showed you above!
LVL 10

Expert Comment

ID: 24079023
Yes, jpaulino's solution should work just fine.

Author Closing Comment

ID: 31567103
Thank You.

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to create and use a custom WaterMark textbox class.  The custom WaterMark textbox class allows you to set the WaterMark Background Color and WaterMark text at design time.   IMAGE OF WATERMARKS STEPS Create VB …
1.0 - Introduction Converting Visual Basic 6.0 (VB6) to Visual Basic 2008+ (VB.NET). If ever there was a subject full of murkiness and bad decisions, it is this one!   The first problem seems to be that people considering this task of converting…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below.…

756 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question