web-dev-qa-db-fra.com

Comment ajouter deux valeurs de champ dans le membre d'affichage combobox en C #

Dans ma table, j'ai un champ de firstname et lastname, maintenant ce que je veux, c'est de définir firstname et lastname comme displaymember dans une combobox, mais je ne sais pas comment faire.

Quelque chose comme ça

cmbEmployees.DataSource = GetEmployees();
//something like below line which doesn't work
cmbEmployees.DisplayMember = "lastname, first_name";     
cmbEmployees.ValueMember = "id";

Comment puis-je atteindre cet objectif? Pour que lastname et firstname soient affichés dans le combobox

15
MekeniKine

Disons que vous avez eu un cours comme celui-ci:

class Person
{
    public string FirstName
    {
        get;
        set;
    }

    public string LastName
    {
        get;
        set;
    }

    public string FullName
    {
        get
        {
            return LastName + ", " + FirstName;
        }
    }

    public Person(string firstname, string lastname)
    {
        FirstName = firstname;
        LastName = lastname;
    }
}

Si vous n'avez pas de propriété FullName, créez-en simplement une au format dont vous souhaitez afficher le nom. Définissez ensuite DisplayMember égal à FullName.

26
Mash

Cet exemple vous guidera comment faire cela sans modifier votre classe de base.

Tout d'abord, vous pouvez laisser votre DisplayMember avec une propriété, disons:

cmbEmployees.DisplayMember = "lastname";

Maintenant, accédez à votre formulaire en mode [Conception], cliquez avec le bouton droit sur ComboBox -> Propriétés.

En haut de la fenêtre Propriétés, cliquez sur Evénements (icône de foudre),

recherchez Format dans la liste d'événements ci-dessous (sous Propriété modifiée) et saisissez-y un nom d'événement, disons: ComboBoxFormat, et appuyez sur Entrée. Vous verrez ceci:

private void ComboBoxFormat(object sender, ListControlConvertEventArgs e)
{

}

Et maintenant, écrivez ces lignes suivantes à l'intérieur:

private void ComboBoxFormat(object sender, ListControlConvertEventArgs e)
{
    // Assuming your class called Employee , and Firstname & Lastname are the fields
    string lastname = ((Employee)e.ListItem).Firstname;
    string firstname = ((Employee)e.ListItem).Lastname;
    e.Value = lastname + " " + firstname;
}

C'est tout ;)

52
Eliran Kuta

Votre requête doit être comme ceci dans la fonction GetEmployees ().

"SELECT id,(lastname + ' ' + first_name) AS NAME FROM TABLE"

cmbEmployees.DataSource = GetEmployees();
cmbEmployees.DisplayMember = "NAME"; 
cmbEmployees.ValueMember = "id";
18
andy

en C # 6, créez une propriété en lecture seule dans votre classe Employee

public string FullName=>$"{lastname} {firstname}";

puis

cmbEmployees.DataSource = GetEmployees();
//something like below line which doesn't work
cmbEmployees.DisplayMember = "FullName";     
cmbEmployees.ValueMember = "id";
3
Hisham

Essayez l'une de ces approches:

2
Konrad Gadzina

CREATE VIEW [dbo]. [Get_view] AS SELECT CONCAT (sell_tb.Name, extra_tb.Name, Purchase_tb.Name) AS Name FROM sell_tb FULL JOIN extra_tb ON extra_tb.E_ID = sell_tb.E_ID FULL JOIN buy_tb ON Purchase_tb.S_ID = sell_tb. S_ID;

      private void alldata1()
    {
        conn.Open();
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "select * from [get_view]";
        cmd.ExecuteNonQuery();
        DataTable dt = new DataTable();
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        sda.Fill(dt);
        comboBox1.DataSource = dt;
        comboBox1.DisplayMember = "Name";
        conn.Close();
    }
0
Sufiyan Ghazi