How to bind data in datagridview combobox column

2019-01-28 01:59发布

Here are contacts but we can have multiple contacts so i want to show a list in combobox

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

if (dt.Rows.Count > 0)
{
    dgv_ClientDetail.DataSource = dt;
}

I have this method to fetch values from database in datagridview but I want one datagridview combobox column and want to bind data in one dgv combobox and other in dgv texboxes. If anybody know then tell me. Here are three columns Name, City , Contacts. I want to show multiple contacts in dgv combobox column

3条回答
唯我独甜
2楼-- · 2019-01-28 02:30

Just select only Name and City in dt, so that you can do something like,

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

EDIT:

        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
        }

Hope this helps...

查看更多
手持菜刀,她持情操
3楼-- · 2019-01-28 02:44

Try This:-

First just have data key in DataGridView for the contact. And on ItemDatabound Events just use the datakey for filter for each Dataitem with in that DataGridView.

查看更多
我欲成王,谁敢阻挡
4楼-- · 2019-01-28 02:46

Try something like this

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

Edit: You need to set ValueMember for combobox as well

查看更多
登录 后发表回答