web-dev-qa-db-ja.com

datagridviewコンボボックス列のデータをバインドする方法

ここに連絡先がありますが、複数の連絡先を持つことができるので、コンボボックスにリストを表示したいと思います

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

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

Datagridviewのデータベースから値をフェッチするこのメソッドがありますが、1つのdatagridviewコンボボックス列が必要で、1つのdgvコンボボックスとdgvtexboxの別のデータをバインドしたいと思います。誰か知っているなら教えてください。名前、都市、連絡先の3つの列があります。 dgvコンボボックス列に複数の連絡先を表示したい

5
Vampire

NameCitydtのみを選択するだけで、次のようなことができます。

        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
        }

お役に立てれば...

3
Vanest

これを試して:-

まず、連絡先のDataGridViewにデータキーを設定します。また、ItemDataboundイベントでは、そのDataGridView内の各Dataitemのフィルターにdatakeyを使用するだけです。

0
Ashish Bisht

このようなものを試してください

// 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を設定する必要があります

0
tariq