C# 如何从来自sqlreader的组合框的selecteditem中获取其他值?
我真的不知道如何在标题中提出一个具体的问题,但是。如何从组合框selectedItem中获取Lname、Fname和Mname to字符串。这是我的想法,但行不通:/C# 如何从来自sqlreader的组合框的selecteditem中获取其他值?,c#,sql,C#,Sql,我真的不知道如何在标题中提出一个具体的问题,但是。如何从组合框selectedItem中获取Lname、Fname和Mname to字符串。这是我的想法,但行不通:/ private void FillWinemakerComboBox() { SqlCommand cmand = new SqlCommand("SELECT (Lname+', '+Fname+' '+Mname) AS combinedName, Lname, Fname, Mname FROM Wi
private void FillWinemakerComboBox()
{
SqlCommand cmand = new SqlCommand("SELECT (Lname+', '+Fname+' '+Mname) AS combinedName, Lname, Fname, Mname FROM Winemaker", con);
con.Open();
SqlDataReader sqlReader = cmand.ExecuteReader();
while (sqlReader.Read())
{
//This is where the comboBox fills the names
winemaker_comboBox.Items.Add(sqlReader["combinedName"].ToString());
//The part where I don't really know how to get the other values
if (winemaker_comboBox.SelectedItem != DBnull.Value)
{
string lastname = sqlReader["Lname"].ToString();
string firstname = sqlReader["Fname"].ToString();
string middlename = sqlReader["Mname"].ToString();
}
}
sqlReader.Close();
con.Close();
}
我要做的是用文本和值对象填充组合框,这样您可以将名称存储在值中并轻松检索它们:
private void FillWinemakerComboBox()
{
SqlCommand cmand = new SqlCommand("SELECT (Lname+', '+Fname+' '+Mname) AS combinedName, Lname, Fname, Mname FROM Winemaker", con);
con.Open();
SqlDataReader sqlReader = cmand.ExecuteReader();
Dictionary<string, string> comboSource = new Dictionary<string, string>();
while (sqlReader.Read())
{
var key = String.Format("{0},{1},{2}", sqlReader["Lname"].ToString(), sqlReader["Fname"].ToString(), sqlReader["Mname"].ToString());
comboSource.Add(key, sqlReader["combinedName"].ToString());
}
winemaker_comboBox.DataSource = new BindingSource(comboSource, null);
winemaker_comboBox.DisplayMember = "Value";
winemaker_comboBox.ValueMember = "Key";
sqlReader.Close();
con.Close();
}
你必须这样做((sqlreader)winemaker\u comboBox.SelectedItem)[“Lname”]检查这个问题没有意义你已经在sqlreader中有了Lname、Fname和Mname,为什么你需要从组合选项中得到它们?@ RASFMNB谢谢,但是我在哪里可以使用它?@杰姆斯DEV,因为我需要它来得到用户具体选择的东西。问题是,如果名字有一个像“约翰·帕特里克”这样的空格怎么办?那现在呢?我不会做任何字符串操作,但我建议你改为使用Id。您可以使用酿酒师Id填充组合框值,然后使用它查询数据库中的名称。我已经用另一种解决方案更新了我的答案。这有点粗糙,但可以胜任。一个问题可能是,字典键必须是唯一的,因此如果两个人的名字完全相同,则会引发异常,但您可以通过在键中添加酿酒师Id或其他方式来解决此问题。说到酿酒师Id,我有点改变了我的想法,我很抱歉您做出了努力,但非常感谢。我的想法是,在组合框填充文本combinedName之后,combinedName的值将成为winemakerID。使搜索更容易。
if (winemaker_comboBox.SelectedItem != DBnull.Value)
{
var names = winemaker_comboBox.SelectedValue.ToString().Split(',');
string lastname = names[0];
string firstname = names[1];
string middlename = names.Length > 2 ? names[2] : string.Empty;
}