C# 如何在C中的combobox显示成员中附加两个字段值
在我的表中,我有一个名为firstname和lastname的字段,现在我想把firstname和lastname设置为组合框中的displaymember,但我不知道怎么做 像这样的C# 如何在C中的combobox显示成员中附加两个字段值,c#,winforms,combobox,C#,Winforms,Combobox,在我的表中,我有一个名为firstname和lastname的字段,现在我想把firstname和lastname设置为组合框中的displaymember,但我不知道怎么做 像这样的 cmbEmployees.DataSource = GetEmployees(); //something like below line which doesn't work cmbEmployees.DisplayMember = "lastname, first_name"; cmbEmploye
cmbEmployees.DataSource = GetEmployees();
//something like below line which doesn't work
cmbEmployees.DisplayMember = "lastname, first_name";
cmbEmployees.ValueMember = "id";
我怎样才能做到这一点?这样lastname和firstname都将显示在组合框中假设您有这样一个类:
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;
}
}
如果没有FullName属性,只需按照希望显示名称的格式创建一个。然后将DisplayMember设置为FullName。尝试以下方法之一: 将串联字段作为值的新词典- 计算列-
在GetEmployees函数中,您的查询应该是这样的
"SELECT id,(lastname + ' ' + first_name) AS NAME FROM TABLE"
cmbEmployees.DataSource = GetEmployees();
cmbEmployees.DisplayMember = "NAME";
cmbEmployees.ValueMember = "id";
本例将指导您如何在不修改基类的情况下执行此操作 首先,您可以将DisplayMember保留为一个属性,例如:
cmbEmployees.DisplayMember = "lastname";
现在,以[设计]模式进入表单,
右键单击组合框->属性
在属性窗口顶部,单击事件闪电图标
在下面的Property Changed(属性更改)下的events(事件)列表中查找格式,并在其中键入一些事件名称,例如:ComboBoxFormat,然后按Enter键。您将看到:
private void ComboBoxFormat(object sender, ListControlConvertEventArgs e)
{
}
现在在里面写以下几行:
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 6中,在Employee类中创建只读属性
public string FullName=>$"{lastname} {firstname}";
然后
创建视图[dbo]。[获取视图] 像 选择CONCATsell_tb.Name、extra_tb.Name、purchase_tb.Name作为名称,从sell_tb FULL JOIN extra_tb ON extra_tb.E_ID=sell_tb.E_ID 购买时完全加入购买\u tb.S\u ID=出售\u tb.S\u 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();
}
您可以添加一个组合这两个名称的属性。默认情况下,控件将显示ToString方法返回的内容,因此您可以覆盖它。这是一个令人惊讶的解决方案非常干净的解决方案!请注意,即使源类不是您的类,它也可以正常工作。例如,我需要它用于System.IO.SerialPort枚举,现在我不需要创建一个特殊的继承类。Eliran,你能解释一下如何设置它吗?你从哪里得到名字的,我不知道这个字段在这个例子中是什么意思。我使用datatable创建databind组合框,并根据datatable列名设置Display和ValueMember。请解释您的答案。
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();
}
// Declare a class
private class ComboRec
{
public string ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
public string Department { get; set; }
}
// Fill the Combo Items
private void FillMyComboList()
{
EmployeesCombo.Items.Clear();
EmployeesCombo.ValueMember = "ID";
EmployeesCombo.DisplayMember = "FullName";
MySqlCommand cmd = new MySqlCommand("select id, firstname, lastname, department from employees order by lastname, firstname", MyConnection);
cmd.Transaction = myTransaction;
MySqlDataReader rdr = cmd.ExecuteReader();
ComboRec comborec;
while (rdr.Read())
{
comborec = new ComboRec();
comborec.ID = rdr["id"].ToString();
comborec.FirstName = rdr["firstname"].ToString();
comborec.LastName = rdr["lastname"].ToString();
comborec.FullName = rdr["lastname"].ToString() + ", " + rdr["firstname"].ToString();
comborec.Department = rdr["department"].ToString();
EmployeesCombo.Items.Add(comborec);
}
rdr.Close();
}
// Get the values from combo
string id = ((ComboRec)EmployeesCombo.SelectedItem).ID);
string firstname = ((ComboRec)EmployeesCombo.SelectedItem).FirstName);
string lastname = ((ComboRec)EmployeesCombo.SelectedItem).LastName);
string fullname = ((ComboRec)EmployeesCombo.SelectedItem).FullName);
string department = ((ComboRec)EmployeesCombo.SelectedItem).Department);