Jenssen
Jenssen

Reputation: 1871

How can I show 2 columns in a combobox? (multiple values)

Right now I have this:

da = new SqlDataAdapter("SELECT * FROM LOGIN WHERE RECHTEN=2", conn);
dtt = new DataTable();
da.Fill(dtt);
for (int i = 0; i < dtt.Rows.Count; i++)
{
    txtKlantid.Items.Add(dtt.Rows[i]["klantId"]);
}

Now it only shows the klantId, but I also want to show the name. And when I've that, so the klantId and the name how can I only select the klantId when I say:

selectedUserId = combobox.Text;

EDIT:

//THIS IS WHERE I INITIALISE THE COMBOBOX

        da = new SqlDataAdapter("SELECT (kg.voornaam+' '+kg.achternaam + ' - ' + CONVERT(varchar,l.klantId)) AS dispValue FROM LOGIN l inner join klantGegevens kg on l.klantId=kg.klantid WHERE RECHTEN=2", conn);
        dtt = new DataTable();
        da.Fill(dtt);
        txtKlantid.DisplayMember = "dispValue";
        txtKlantid.ValueMember = "klantId";
        txtKlantid.DataSource = dtt;

//THIS IS THE BUTTON FOR DELETING A USER

  private void btnDeleteUser_Click(object sender, EventArgs e)
        {

            if (userInformation.addPersonsPermission)
            {
                int selectedUserId = Convert.ToInt32(((DataRowView)txtKlantid.SelectedValue)["klantId"]);
                if (users.deleteKlantAdmin(selectedUserId))
                {
                    MetroMessageBox.Show(this, "Gebruiker "+selectedUserId+" is verwijderd", "Verwijderd");
                }
                else
                {
                    MetroMessageBox.Show(this, "Er ging iets fout, contacteer de beheerder", "Fout");
                }

            }
            else
            {
                loginAddUser addUserLogin = new loginAddUser();
                addUserLogin.ShowDialog();
            }
        }

Upvotes: 1

Views: 1741

Answers (2)

Vanest
Vanest

Reputation: 916

DisplayMember and ValueMember properties will be your friends in this case.

Please avoid selecting all the fields from the table just to fill your combobox. You can just do something like,

da = new SqlDataAdapter("SELECT (name + ' - ' + CONVERT(varchar,klantId)) AS dispValue, klantId FROM LOGIN WHERE RECHTEN=2", conn);
dtt = new DataTable();
da.Fill(dtt);
txtKlantid.DisplayMember = "dispValue";
txtKlantid.ValueMember = "klantId";
txtKlantid.DataSource = dtt;

In this example, txtKlantid.SelectedValue will give you the klantId values and txtKlantid.Text will give you the name - klantId values.

Hope this helps...

Upvotes: 1

Manish Parakhiya
Manish Parakhiya

Reputation: 3798

You can use DisplayMember and ValueMember property of ComboBox

da = new SqlDataAdapter("SELECT * FROM LOGIN WHERE RECHTEN=2", conn);
dtt = new DataTable();
da.Fill(dtt);

txtKlantid.DisplayMember = "Name"; //Name of field to display
txtKlantid.ValueMember = "klantId";
txtKlantid.DataSource = dtt;

And you can get Name And Id back by following

var name = txtKlantid.Text;
var id = txtKlantid.SelectedValue;

As per your requirement you can combine Id and Name

for (int i = 0; i < dtt.Rows.Count; i++)
{
    txtKlantid.Items.Add(dtt.Rows[i]["klantId"].ToString()+"-"+dtt.Rows[i]["Name"].ToString());
}

Upvotes: 2

Related Questions