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
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
.
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 ;)
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";
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";
Essayez l'une de ces approches:
Dictionary
avec des champs concaténés comme valeur - https://stackoverflow.com/a/1006588/1816426CREATE 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();
}