2016-11-04 5 views
1

Я хочу связать два поля вместе и отобразить их в combobox.Два значения полей в дисплее Combobox и datatable C#

У меня есть имя и фамилия в моей базе данных, и как отображать полное имя в combobox?

Я попробовал этот код, но я получил некоторые ошибки:

OracleDataAdapter names= new OracleDataAdapter("SELECT first, last FROM person", conn); 
DataTable dt = new DataTable(); 
names.Fill(dt); 
dt.Columns.Add("FullName", typeof(string), "first' : ' last"); //<-- error's here 
cmbCBox.DisplayMember = "FullName"; 
cmbBox.DataSource = dt; 
conn.Close(); 

Ошибка:

недостающее операнд после ':' оператора.

+1

Я бы создал это имя в вашем запросе. – LarsTech

+0

Также, что хорошего в 'SELECT first, last'? После того, как вы выбрали члена в cbo, вам необходимо передать 'id'. 'SELECT first || ':' || последний как FullName, pesonId ... '. , , 'cmbCBox.ValueMember =" pesonId "'. И нет необходимости в 'dt.Columns.Add' –

ответ

1

Если вы хотите создать формат, как это:

Donald : Duck

Тогда выражение:

dt.Columns.Add("full", typeof(string), "first + ' : ' + last"); 

Пример кода:

System.Data.DataTable dt = new System.Data.DataTable(); 

dt.Columns.Add("first", typeof(string)); 
dt.Columns.Add("last", typeof(string)); 
dt.Columns.Add("full", typeof(string), "first + ' : ' + last"); 

System.Data.DataRow row = dt.NewRow(); 
row["first"] = "Donald"; 
row["last"] = "Duck"; 
dt.Rows.Add(row); 
1

Просто спросите механизм базы данных для создания съел свой FullName для вас

// Oracle operator to concatenate strings is || 
string query = @"SELECT first || ' ' || last as FullName FROM person"; 
OracleDataAdapter names= new OracleDataAdapter(query, conn); 
... 
cmbCBox.DisplayMember = "FullName"; 

Этот подход будет возвращать только FullName как композиция первого и последнего полей. Конечно, ничто не мешает вам добавлять другие поля, если они вам понадобятся. Например, вам может понадобиться PersonID (или какой-либо первичный ключ в таблице лиц) для использования ValueMember вашего комбо. Таким образом, вы можете прочитать SelectedValue для восстановления записи Person, принадлежащей выбранному FullName.

Последнее примечание. Я думаю, что создание клиентской стороны FullName с использованием выражения DataTable является хорошим выбором для многих сценариев, но не в этом контексте, когда движок базы данных мог бы сделать это намного быстрее. Я предлагаю сделать простую проверку, используя секундомер, чтобы проверить различия.

Смежные вопросы