Scribling Doodle Ответов: 1

Как отобразить 2 столбца в combobox


Привет ребята,
Мне было интересно, можно ли показать, например, ID_REPORT и CLIENT_NAME в combobox, как это:

--------------------
1-имя клиента v |
--------------------
Каждый отчет связан с клиентом, и лучший способ идентифицировать отчеты-использовать имя клиента. Многие работники обычно знают отчеты по имени клиента, но у них есть специальный код, и этот код действительно необходим.

Что я уже пробовал:

Я попытался просто изменить displaymember, чтобы использовать оба столбца следующим образом:

cmbReportID.DisplayMember = "ID_REPORT" + "-" + "ИМЯ_КЛИЕНТА"

Richard Deeming

Вероятно, проще всего изменить запрос, чтобы он возвращал объединенное значение в виде вычисляемого столбца, и использовать его в качестве элемента отображения.

Возможно, есть и другие варианты, но вы не сказали нам, какой фреймворк пользовательского интерфейса вы используете. (Windows Forms, WPF, Xamarin, ASP.NET веб-формы, ASP.NET MVC и т. д.)

Scribling Doodle

Я использую Winforms, но поскольку я использую * для выбора всех столбцов, как я могу просто разработать соединение между обоими столбцами? Я также видел некоторые вещи c# на этом форуме,но все они кажутся мне китайскими... Поскольку я новичок в языках программирования.

Richard Deeming

Не используйте SELECT * FROM ...; просто выберите поля, которые вы действительно хотите.

Scribling Doodle

Например, "SELECT ID-REPORT +" var " + CLIENT_NAME FROM ..."?

Richard Deeming

SELECT 
    ID_REPORT, 
    CLIENT_NAME, 
    Convert(varchar(50), ID_REPORT) + ' - ' + CLIENT_NAME As DisplayName 
FROM 
    ...

Scribling Doodle

Можете ли вы сказать мне, зачем мне нужно конвертировать ID_REPORT в varchar, если это число автоматического приращения?

Richard Deeming

Потому что вы сочетаете его с CLIENT_NAME, который (предположительно) является varchar колонка.

С тех пор как int тип имеет более высокий приоритет, чем varchar, если вы попытаетесь их объединить без Преобразуя, SQL попытается преобразовать varchar к int, и вы получите ошибку" преобразование не удалось".

Scribling Doodle

Да, я проверил именно это, и это было то, что я придумал. Спасибо за разъяснение. Опубликуйте его как ответ, чтобы я мог принять его ;)

1 Ответов

Рейтинг:
9

Richard Deeming

Как обсуждалось в комментариях, самым простым решением является изменение SQL-запроса для добавления объединенного значения в качестве вычисляемого столбца:

SELECT 
    ID_REPORT, 
    CLIENT_NAME, 
    Convert(varchar(50), ID_REPORT) + ' - ' + CLIENT_NAME As DisplayName 
FROM 
    ...

Затем вы устанавливаете отображаемый элемент на имя вычисляемого столбца:
cmbReportID.DisplayMember = "DisplayName"