'Adding items to DataGridView Column already defined as ComboBox
I have a DataGridView with a Column already defined as ComboBox. How do I add items to that Column Combobox so that they are available in that column for each new row?
I have tried everything I could think of or find on the web. Here's the latest attempt:
[![ static DataGridViewComboBoxColumn dgvCmb = new DataGridViewComboBoxColumn(); static DataGridViewComboBoxCell dgvCmbCell = new DataGridViewComboBoxCell(); DataTable dt = new DataTable();
private void frmReporting_Load(object sender, EventArgs e)
{
dt = Populate("SELECT DISTINCT OperatorName FROM tblOperator WHERE OperatorName NOT LIKE '*%' AND Active='1' ORDER BY OperatorName");
dgvCmbCell = FillComboBox();
dgvReports[1, 0] = dgvCmbCell;
}
private DataGridViewComboBoxCell FillComboBox()
{
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
//DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
DataGridViewComboBoxCell combo = new DataGridViewComboBoxCell();
ArrayList row = new ArrayList();
foreach (DataRow dr in dt.Rows)
{
row.Add(dr[0].ToString());
}
combo.Items.AddRange(row.ToArray());
return combo;
}
private DataTable Populate(string sqlCommand)
{
myConnection.Open();
SqlCommand command = new SqlCommand(sqlCommand, myConnection);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = command;
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
adapter.Fill(table);
myConnection.Close();
return table;
}
Solution 1:[1]
Well… I am going to make a few assumptions here since you did not supply all the info needed. In the future you may get better results if you supply all the info that applies to your question as opposed to helpers having to ask these obvious questions.
First you show a picture of a grid that has a column named “Name.” This looks like a combo box column given the little down arrow. However, you do not show the code that “adds” that column to the grid. SO, I will assume two things here…
- the grid in the picture is named
dgvReports - that the combo box column shown in the picture was added by you in the “Designer” and that columns
Nameis “OperatorName.”
If this is the case, then you could change your current code to the code below to add the DataTable dt as a DataSource to the EXISTING column named “OperatorName” in the grid named dgvReports…
private void frmReporting_Load(object sender, EventArgs e) {
dt = Populate("SELECT DISTINCT OperatorName FROM tblOperator WHERE OperatorName NOT LIKE '*%' AND Active='1' ORDER BY OperatorName");
DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)dgvReports.Columns["OperatorName"];
col.DisplayMember = "OperatorName";
col.DataSource = dt;
}
Considering that the DataGridViewComboBoxColumn already exist in the dgvReports, then, it is unnecessary to “create” another combo box column or any combo box cells as your current code does.
If the Name of the combo box column in the grid is NOT named “OperatorName” then you need to change the code to the whatever Name the combo box column name has in the grid…
(DataGridViewComboBoxColumn)dgvReports.Columns["GridComboBoxColumnName"];
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | JohnG |
