如何在datagridview组合框列中绑定数据

Posted

技术标签:

【中文标题】如何在datagridview组合框列中绑定数据【英文标题】:How to bind data in datagridview combobox column 【发布时间】:2015-06-12 05:24:18 【问题描述】:

这里是联系人,但我们可以有多个联系人,所以我想在组合框中显示一个列表

DataTable dt = new DataTable();
dt = MainClass.GetDatabyQuery("select * from tbl");

if (dt.Rows.Count > 0)

    dgv_ClientDetail.DataSource = dt;

我有这种方法可以从 datagridview 中的数据库中获取值,但我想要一个 datagridview 组合框列,并希望将数据绑定到一个 dgv 组合框和另一个 dgv texbox 中。如果有人知道然后告诉我。这是三列名称、城市、联系人。我想在 dgv 组合框列中显示多个联系人

【问题讨论】:

你需要详细说明,展示你的gridview结构 我无法发布图片。不要有太多的名声 每一行都有一个组合框?每行都有一个文本框。组合框和文本框是否属于不同的列?详细解释一下。 这里有三个列名称、城市、联系人。我想在 dgv 组合框列中显示多个联系人,但在 dgv 文本框列中显示姓名和城市 我猜你想将城市绑定到每行的城市组合框中?对 【参考方案1】:

只需在dt 中选择NameCity,这样您就可以执行类似的操作,

        dgv_ClientDetail.DataSource = dt;
        DataGridViewComboBoxColumn dgvCboColumn = new DataGridViewComboBoxColumn();
        dgvCboColumn.Name = "Contacts";
        dgvCboColumn.DataSource = dtContacts; //DataTable that contains contact details
        dgvCboColumn.DisplayMember = "Name";
        dgvCboColumn.ValueMember = "Id";
        dataGridView1.Columns.Add(dgvCboColumn);

编辑:

        dgv_ClientDetail.DataSource = new DataView(dt)
                                         .ToTable(true, new string[]  "Name", "City" );
        DataGridViewComboBoxColumn dgvCboColumn = new DataGridViewComboBoxColumn();
        dgvCboColumn.Name = "Contacts";
        dgv_ClientDetail.Columns.Add(dgvCboColumn);
        foreach (DataGridViewRow row in dgv_ClientDetail.Rows)
        
            DataGridViewComboBoxCell cboContacts = (DataGridViewComboBoxCell)
                                                         (row.Cells["Contacts"]);
            cboContacts.DataSource = //Get the contact details of a person,
                                     //using his Name or Id field (row.Cells["Name"]);
            cboContacts.DisplayMember = "Name"; //Name column of contact datasource
            cboContacts.ValueMember = "Id";//Value column of contact datasource
        

希望这会有所帮助...

【讨论】:

每行显示相同的联系人。 是的...那么您要在每一行设置不同的联系人集吗? 是的 在新行中,有一个新成员有 2 个联系人,我想在 dgv 组合中显示他的行中的这 2 个联系人。如果任何身体有 1 个接触,它应该在组合中显示 1 个接触 不工作。给出错误“无法将'System.Windows.Forms.DataGridViewTextBoxCell'类型的对象转换为'System.Windows.Forms.DataGridViewComboBoxCell' @user3355213 这个怎么样?【参考方案2】:

试试这个:-

首先在 DataGridView 中有联系人的数据键。在 ItemDatabound 事件上,只需使用该 DataGridView 中每个 Dataitem 的数据键进行过滤。

【讨论】:

【参考方案3】:

试试这样的

// Loop through rows and get each combobox

foreach (DataGridViewRow row in dgv_ClientDetail.Rows)

     DataGridViewComboBoxCell ContactCombo = (DataGridViewComboBoxCell)(row.Cells[index of Contact column]);

     ContactCombo.DataSource = // your contacts datasource;
     ContactCombo.DisplayMember = "name of field to be displayed like say ContactName";
     ContactCombo.ValueMember = "Id";

编辑:您还需要为组合框设置 ValueMember

【讨论】:

它给出错误“无法将'System.Windows.Forms.DataGridViewTextBoxCell'类型的对象转换为'System.Windows.Forms.DataGridViewComboBoxCell'。 这意味着文本框单元格被选中,请检查您是否传递了正确的索引 索引从零开始。如果列的顺序是 Name、City 和 Contact 。那么联系人组合框列的索引为 2。

以上是关于如何在datagridview组合框列中绑定数据的主要内容,如果未能解决你的问题,请参考以下文章

将数据添加到已存在组合框列的 dataGridView 行

文本框在 DataGridview 文本框列中不可见

Datagridivew DataGridViewComboBoxColumn 选择值成员

C#根据gridview组合框更改gridview列数据?

Datagridview 中的州、县和市级联组合框列

我应该如何将列中的所有数据加载到 datagridview 组合框?