C# 将DataGridView中的列转换为组合框

C# 将DataGridView中的列转换为组合框,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个用C#编写的WinForms应用程序,其中DataGridView绑定到从SQL数据库填充的数据源 我的代码如下- string sqlText = "SELECT columns FROM table;"; SqlCommand sqlCom = new SqlCommand(sqlText); DataTable table = new DataTable(); SqlConnection linkToDB = DatabaseConnection(); sqlCom.Connect

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

我的代码如下-

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;
DataGridViewComboBoxColumn colBox = new DataGridViewComboBoxColumn();
colBox.DataSource = GetListOfValues();   
dataMyGridView.Columns.Add(colbox);
我已经尝试如下添加DataGridViewComboBox-

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;
DataGridViewComboBoxColumn colBox = new DataGridViewComboBoxColumn();
colBox.DataSource = GetListOfValues();   
dataMyGridView.Columns.Add(colbox);
现在它可以工作了,但它使用ComboBox添加了一个全新的列,而不是将现有列之一转换为ComboBox

有人能解释一下我是如何将dataMyGridView中的现有列转换为组合框的吗

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

我今天回答了一个类似的问题

创建列后,不能更改其类型。你可以通过两种方式实现你的目标

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


2.修改数据库,使列表由数据库提供,绑定将自动创建comboboxcolumn。

嗨,我有这样的帖子,请查看。。它与示例代码完美结合


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

。 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个数据源?我希望在网格中有一个绑定到datasource1的组合列(网格绑定到datasource1。该列绑定到datasource1的一个属性)。从数据源2中获取列中组合的所有可能值2。在该列的任意组合中进行选择时,将显示propagade to datasource1属性的结果。