将DataGridView中的列转换为ComboBox

时间:2014-01-24 12:56:34

标签: c# winforms datagridview

我有一个用C#编写的WinForms应用程序,其中我有一个DataGridView绑定到从SQL数据库填充的DataSource。

我的代码如下 -

string sqlText = "SELECT columns FROM table;";
SqlCommand sqlCom = new SqlCommand(sqlText);
DataTable table = new DataTable();
SqlConnection linkToDB = DatabaseConnection();
sqlCom.Connection = linkToDB;
linkToDB.Open();
using (linkToDB)
using (SqlDataAdapter adapter = new SqlDataAdapter(sqlCom))
{
    adapter.Fill(table);
}     
dataMyGridView.DataSource = table;

我尝试将DataGridViewComboBox添加到此处,如下所示 -

DataGridViewComboBoxColumn colBox = new DataGridViewComboBoxColumn();
colBox.DataSource = GetListOfValues();   
dataMyGridView.Columns.Add(colbox);

现在这样可行,但是它使用ComboBox添加了一个全新的列,而不是将其中一个现有列转换为ComboBox。

任何人都可以解释我如何将dataMyGridView中的现有列转换为ComboBox吗?

GetListOfValues函数只返回一个DataTable,其中包含ComboBox字段的所有可能值。它填充正确,但就像我说的,它是一个全新的专栏。如何将添加的ComboBox引用到'table'中的相关属性。

3 个答案:

答案 0 :(得分:2)

我今天回答了类似的question

创建列后,您无法更改其类型。您可以通过两种方式实现目标。

1.创建所需的列,将其添加到网格并绑定数据。如果设置列的DataPropertyName属性,那么当数据绑定时,数据列将绑定到网格列。 DataGridView将自动生成其他列。将第二个数据源绑定到组合框本身。

2.修改您的数据库,使列表由数据库提供,绑定将自动创建组合柱。

答案 1 :(得分:1)

是的,一旦填充了DataGridView,就无法更改列类型。 但是,您可以通过执行以下步骤来实现目标。 1。

                dataView.Columns["yourColoumn"].Visible = false;
                DataGridViewComboBoxColumn cmbCol = new DataGridViewComboBoxColumn();
                cmbCol.HeaderText = "yourColumn";
                cmbCol.Name = "myComboColumn";
                cmbCol.Items.Add("True");
                cmbCol.DataSource = myList();
                dataView.Columns.Add(cmbCol);
                dataView.Columns["myComboColumn"].DisplayIndex = "at any index that you want";

                foreach (DataGridViewRow row in dataView.Rows)
                {
                    row.Cells["myComboColumn"].Value = row.Cells["yourColumn"].Value;
                } 

。 2.现在你只需做一件事,再举办一次。

    private void dataView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                try
                {
                    dataView.Rows[e.RowIndex].Cells["yourColoumn"].Value = dataView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                }
                catch (Exception ex)
                {
                }
             }

其实你我只是创建了一份" yourColoumn"在组合框中。在后端" yourColoumn"正在更新。

答案 2 :(得分:-1)

您好我有这样的帖子请查看..它与示例代码完美无缺。

MyTacTics.Blogspot.com enter image description here