Объединение двух свойств для отображения в DropDownList

Фон

В нашем последнем приключении я пытался правильно показать Dictionary<Foo, Bar<T>> . Благодаря полезным ответам в этом посте я понял, что поступил неправильно.

Проблема

В сегодняшнем приключении я пытался получить List<T> для отображения два конкретных свойства из последнего вопроса. Каждый список имеет определенные свойства, показанные ниже:

---------------------
| Барный класс |
---------------------
| Id int |
| Foo.Id int |
| Строка имени |
| Строка типа |
---------------------

Для отображения я хотел бы отобразить Bar.Name + Bar.Type объединенные вместе. Очевидно, я должен сохранить объект полностью, поскольку идентификатор будет передан обратно для отправки в базу данных.

Сначала попробовал <%#Eval("Value.Type" + "Value.Name")%>, явно не вышло. Теперь я предполагаю, что мне нужно написать цикл foreach для итерации по объекту словаря и извлечения Dictionary.Value неповрежденных объектов и построения из этого раскрывающегося списка. Но затем возникает проблема: привязать это обратно к соответствующему профилю и отправить его обратно в базу данных оптом.

Вот как сейчас выглядит страница:

<tr><td align="center"> <%#Eval("Key.Name") %></td>
    <td align="center"><asp:DropDownList ID="ddlListOfBars" runat="server" 
DataSource='<%#Eval("Value")%>' DataValueField="Id" DataTextField="Type" />
</td>

Я обдумывал разные способы изменения, DataTextField но еще не придумал комбинацию, которая работает.

Вопросов

  1. Я слишком много думаю об этом?
  2. Что мне не хватает?
  3. Есть ли ресурс о том, как вы могли бы извлечь определенные свойства из, List<T>чтобы использовать эти значения в качестве отображаемых значений для DropDownList, и если да, то есть ли хороший ресурс по этой теме?
  4. Этот пост чистый как грязь?

Ответов (3)

Решение

Как оказалось, проблема легко разрешима, если два столбца из таблицы объединить в один столбец, например:

SELECT Column1Name + ' - ' + Column2Name AS Column3Name FROM Table1 WHERE ...

Это превращает это:

Column1Name Column2Name
----------- ----------- 
Материал1 Материал5
Материал2 Материал6
Материал3 Материал7
Материал4 Материал8

В это:

Column3Name
---------------
Stuff1 - Stuff5
Stuff2 - Stuff6
Материал3 - Материал7
Stuff4 - Stuff8

Когда все остальное терпит неудачу, подумайте немного ниже.

Может быть, я что-то упускаю (не смотрел на предыдущий вопрос), но почему бы вам просто не сделать это?

<%# Eval("Name") + Eval("Type") %>

Перед объединением строки мне пришлось преобразовать объект в строку. Это сработало для меня.

Text='<%# Eval("LastName").ToString() + ', ' + Eval("FirstName").ToString() %>'