Tim
Tim

Reputation: 27

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;
    }

]1]1

Upvotes: 0

Views: 550

Answers (1)

JohnG
JohnG

Reputation: 9479

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…

  1. the grid in the picture is named dgvReports
  2. that the combo box column shown in the picture was added by you in the “Designer” and that columns Name is “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"];

Upvotes: 0

Related Questions