2013-07-09 2 views
0

Я хочу отобразить два разных столбца в одном конкретном поле со списком. Когда я запустил его, отобразится Customer ID. Вот мой код.Как отобразить два разных столбца в одном combobox

void GetRecords2() 
{ 


    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = cn; 
    cmd.CommandText = "SELECT CustomerID, firstname 
      + ',' + lastname FROM Customer"; 

    SqlDataAdapter adp = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    adp.Fill(ds, "Customer"); 

    cboName.DataSource = ds; 
    cboName.DisplayMember = "Customer.firstname, Customer.lastname"; 


    cboName.ValueMember = "Customer.CustomerID"; 


} 
+0

Не уверен, что это возможно? Что именно вы имеете в виду –

ответ

1

Я вижу, вы уже создали единый столбец результатов, содержащий «комбинированное» значение. Это битва.

Но, вы должны дать вашей колонки имя (обратите внимание на AS FullName псевдоним):

cmd.CommandText = "SELECT CustomerID, firstname + ',' + lastname AS FullName " + 
    "FROM Customer"; 

Таким образом, вы можете сослаться на него позже по имени:

cboName.DisplayMember = "FullName"; 
+0

Сопоставление, отображающее CustomerID – user2559183

1

Это будет работать. Я считаю, что привязка Dictionary к ComboBox имеет гораздо более предсказуемые результаты.

В моем подходе отсутствует дополнительный SQL синтаксис, DataSet и SqlDataAdapter.

Вместо этого я использовать SqlDataReader разместить нужную информацию в Dictionary, а затем я связываю, что Dictionary как DataSource в Combobox.

void GetRecords2() 
{   
    Dictionary <int, string> myDict = new Dictionary<int, string>(); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = cn; 
    cmd.CommandText = "SELECT CustomerID, firstname, lastname FROM Customer"; 

    SqlDataReader reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     myDict.Add(Convert.ToInt32(reader["CustomerID"]), 
      reader["firstname"].ToString() + " " + reader["lastname"].ToString()); 
    } 

    if (myDict.Count > 0) 
    { 
     cboName.DataSource = new BindingSource(myDict, null); 
     cboName.DisplayMember = "Value";    
     cboName.ValueMember = "Key"; 
    }   
} 
0

Проверьте это:

void GetRecords2() 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = cn; 
    cmd.CommandText = "SELECT CustomerID, firstname 
      + ',' + lastname FullName FROM Customer"; 

    SqlDataAdapter adp = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    adp.Fill(ds, "Customer"); 

    cboName.DataSource = ds; 
    cboName.DisplayMember = "FullName"; 


    cboName.ValueMember = "CustomerID"; 
} 

Чтобы получить выбранное значение:

string customerid = cboName.SelectedValue.toString(); //CustomerID: 1 

Чтобы получить выбранный элемент

string fullname = cboName.SelectedItem.Text; //FullName : John Hawkins 

С наилучшими пожеланиями