【问题标题】:Converting Column in DataGridView into a ComboBox将 DataGridView 中的列转换为 ComboBox
【发布时间】:2014-01-24 12:56:34
【问题描述】:

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

我的代码如下-

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 中的现有 Column 转换为 ComboBox?

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

【问题讨论】:

  • 不确定这是否真的有效,但您可以尝试在设计模式下添加两列(文本框和组合框),并在执行代码时删除绑定数据后不需要的列.
  • 嗨,你到底想要什么......就像在性别的情况下,你想要一个带有男性和女性选项的下拉菜单,当你从表格显示到网格时,在网格中你想要组合框而不是文本值......对吗? ?

标签: c# winforms datagridview


【解决方案1】:

我今天回答了类似的question

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

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

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

【讨论】:

  • 如何绑定2个数据源?我想在绑定到 datasource1 的网格中有一个组合列(网格绑定到 datasource1。该列绑定到数据源 1 的一个属性)。从数据源 2 中获取列中组合的所有可能值。进行选择时,在该列中的任何组合中,将结果传播到 datasource1 属性。
【解决方案2】:

是的,确实,一旦您的 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”正在更新。

【讨论】:

    【解决方案3】:

    您好,我有这样的帖子,请检查一下。它与示例代码完美。

    MyTacTics.Blogspot.com

    【讨论】:

    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    相关资源
    最近更新 更多