C# 如何从来自sqlreader的组合框的selecteditem中获取其他值?

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

我真的不知道如何在标题中提出一个具体的问题,但是。如何从组合框selectedItem中获取Lname、Fname和Mname to字符串。这是我的想法,但行不通:/

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;
}