0

I've checked for hours but I can't seem to find anything to help.

I want to loop through tables and columns from a dataset and use the column name in a combobox.items.add() line, however the eventual goal is to fill the combobox from the dataset itself possibly in a combobox.datasource line.

The first problem is that I can't get the code correct to setup the combobox control where it allows me to use .items.add("") and in extension .datasource

Error Message = "Object reference not set to an instance of an object"

dstcopt is the dataset from a oledbDataAdapter .fill(dstcopt,"table") line (which returns correct values)

tc_opt is a tab name on a tab control where the comboboxes are

            For Each dstable In dstcopt.Tables
                For Each dscolumn In dstable.Columns

                    Dim colName As String = dscolumn.ToString
                    MsgBox(colName) 'This retuns "aantigen"

                    Dim cb As ComboBox = Me.tc_opt.Controls("cb_" & colName)
                    cb.Items.Add(colName)

                    'cb_aantigen.DataSource = dstcopt.Tables(dstable.ToString)
                    'cb_aantigen.DisplayMember = "aantigen"

                    'cb_atarget.DataSource = dstcopt.Tables(dstable.ToString)
                    'cb_atarget.DisplayMember = "atarget"

                Next
            Next

The second problem comes when I do it manually (which works) using the exact combobox names cb_aantigen and cb_atarget as seen in the comments.

The problem is that once the form is loaded and the cb's are filled with the correct values, I can't change the value in any single cb individually, when I change one value it changes them all (there is 15 comboboxes in total) I know this is down to using a dataset, but I don't know away to 'unlink them from each other or the dataset'

Not sure if I need to split this into 2 questions, but help on either problem would be appreciated.

EDIT:

After looking at only this section of code for a day. This is what I have come up with to tackle both the problems at once.

The combobox control not working was down to using a tab tc_opt instead of a groupbox gp_anti

The issue with splitting the dataset up into individual comboboxes, I've worked around by taking the value of each cell in the database and adding it separately, probably a better way to do it though

            For Each dstable As DataTable In dstcopt.Tables
                For Each dscolumn As DataColumn In dstable.Columns

                    Dim colName As String = dscolumn.ToString

                    Dim cb(2) As ComboBox
                    cb(0) = CType(Me.gp_anti.Controls("cb_" & colName), ComboBox)
                    cb(1) = CType(Me.gp_rec.Controls("cb_" & colName), ComboBox)
                    cb(2) = CType(Me.gp_nat.Controls("cb_" & colName), ComboBox)

                    For icb = 0 To cb.Count - 1
                        If Not (IsNothing(cb(icb))) Then
                            For irow = 0 To dstable.Rows.Count - 1
                                If dstable.Rows(irow)(colName).ToString <> Nothing Then

                                    Dim icbitemdupe As Boolean = False

                                    If cb(icb).Items.Contains(dstable.Rows(irow)(colName).ToString) Then
                                        icbitemdupe = True
                                    End If

                                    If icbitemdupe = False Then
                                        cb(icb).Items.Add(dstable.Rows(irow)(colName).ToString)
                                    End If

                                End If
                            Next
                        End If
                    Next
                Next
            Next
nora
  • 161
  • 1
  • 8
  • In regards to "I can't change the value in any single", to prevent this use DataTable.Copy from one DataTable to another. Next, to add items after assigning data via DataSource you need to use something like CType(ComboBox1.DataSource ,DataTable).Rows.Add(....) – Karen Payne Feb 10 '16 at 13:54
  • Yes, this should be 2 questions. There is no context for the NRE, but the answer is almost certainly covered in [What is a NullReferenceException and how do I fix it?](http://stackoverflow.com/q/4660142/1070452) – Ňɏssa Pøngjǣrdenlarp Feb 10 '16 at 14:19
  • `datatable.copy` - Would this require me to have 15 different tables for each of the comboboxs or is there a way to `copyto` a combobox ?.... `...datatable).rows.add(...)` - I'm not looking to modify the data once it is in the combobox, it's simply to allow the user to select from previous entries in a database. But I require the user to select multiple values from different columns in a single table. – nora Feb 10 '16 at 14:23

0 Answers0