combobox menus in a datagridview

dsmithcorteksys

New member
Joined
Jun 4, 2007
Messages
2
Programming Experience
1-3
Thanks in advance if anyone has any advice for the issue I am trying to resolve here. I currently have a datagrid view populated in a form within my application and previously I had all columns and cells displaying as text fields. Now I have 4 new columns (6-9 in the code below) that I want to display as simple combo menus (not bound to a table).
This code will run but it doesn’t turn the columns I want into combo selections; it inserts new columns into my grid. The number of new columns that are output to the grid in this situation more than doubles the number of columns existing in the dataset that I am populating the grid with. Also the new columns that are inserted do have the combo menus that I created, but the grid is still not correct. I am not sure that dgModules.Columns.Insert(column index, cboHBSize)
is the correct solution to changing the last 4 columns to display combobox menus?

I am using:
Visual Studio 2005, Visual Basic.NET
In this scenario I am calling a single function in my form class that I am using to format the columns of the grid I am working with. Here is that block of code:

VB.NET:
Public Sub GetGridColumnAppearance() 

        ' Make the ModuleID column invisible 
        With dgModules.Columns(0) 
            .Visible = False 
        End With 
        ' Make the Module Identity Column 
        ' read only so these values cannot be modified 
        With dgModules.Columns(1) 
            .ReadOnly = True 
            .HeaderText = "Module Id" 
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 
            .SortMode = DataGridViewColumnSortMode.NotSortable 
        End With 
        With dgModules.Columns(2) 
            .HeaderText = "Top Elevation" 
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 
            .SortMode = DataGridViewColumnSortMode.NotSortable 
        End With 
        With dgModules.Columns(3) 
            .HeaderText = "Length" 
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 
            .SortMode = DataGridViewColumnSortMode.NotSortable 
        End With 
        With dgModules.Columns(4) 
            .HeaderText = "Width" 
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 
            .SortMode = DataGridViewColumnSortMode.NotSortable 
        End With 
        With dgModules.Columns(5) 
            .HeaderText = "Horizontal Rebar Centers" 
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 
            .SortMode = DataGridViewColumnSortMode.NotSortable 
        End With 
        ' combo box drop down menus for each of the following 
        ' columns 
        With dgModules.Columns(6) 
            .HeaderText = "Horizontal Bar Size" 
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 
            .SortMode = DataGridViewColumnSortMode.NotSortable 
            Dim cboHBSize As New DataGridViewComboBoxColumn 
            cboHBSize.Items.Add("#4") 
            cboHBSize.Items.Add("#5") 
            cboHBSize.Items.Add("#6") 
            dgModules.Columns.Insert(6, cboHBSize) 
        End With 
        With dgModules.Columns(7) 
            .HeaderText = "Horizontal Bar Spacing" 
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 
            .SortMode = DataGridViewColumnSortMode.NotSortable 
            Dim cboHBSpacing As New DataGridViewComboBoxColumn 
            cboHBSpacing.Items.Add("1' 1/4" & Chr(34)) 
            cboHBSpacing.Items.Add("8" & Chr(34)) 
            dgModules.Columns.Insert(7, cboHBSpacing) 
        End With 
        With dgModules.Columns(8) 
            .HeaderText = "Vertical Bar Size" 
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 
            .SortMode = DataGridViewColumnSortMode.NotSortable 
            Dim cboVBSize As New DataGridViewComboBoxColumn 
            cboVBSize.Items.Add("#5") 
            cboVBSize.Items.Add("#6") 
            cboVBSize.Items.Add("#7") 
            cboVBSize.Items.Add("#8") 
            dgModules.Columns.Insert(8, cboVBSize) 
        End With 
        With dgModules.Columns(9) 
            .HeaderText = "Vertical Bar Spacing" 
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 
            .SortMode = DataGridViewColumnSortMode.NotSortable 
            Dim cboVBSpacing As New DataGridViewComboBoxColumn 
            cboVBSpacing.Items.Add("1' 1/4" & Chr(34)) 
            cboVBSpacing.Items.Add("8" & Chr(34)) 
            dgModules.Columns.Insert(9, cboVBSpacing) 
        End With 
End Sub
Here is the grid population process I am using (I am using XML because there is also another class object instantiated in the middle of this operation that I using to convert dimensions of certain columns).

- select from database

- read into a data table

- declare new dataset and place the
the data table in the dataset

- use the dataset to write an XML
file (conversion process takes place for some values in the dataset)

- declare a new dataset and read XML
file into the dataset (conversion process takes place for some values in the dataset)

- declare a new dataview and populate the
dataview with the current dataset

- assign the current dataview to the datagrid's
data source

- format the columns of the grid
 
Last edited by a moderator:
Edit the Columns property of the datagridview at design time..

ps; I find your process of:

read db, write file, read file, show file

a bit.. er.. not good. If i had to show soemthing d/l from a DB, no way would i rely in a write/read to/from file process in the middle to change the data..
 
thanks for the advice

Thanks for your advice, but that wasn't my question actually.

My data integrity has remained very solid and this menu system is now in production.

I am still trying to figure out a simple way to present a combo menu in a datagridview if anyone has any advice.
 
Back
Top