ASP.NET - заполнить поле со списком, чтобы отобразить два значения из источника данных? - PullRequest
2 голосов
/ 21 июля 2009

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

Таким образом, вместо того, чтобы просто заполнить его "rowid" (возможные значения "1", "2", "3" и т. Д.), Я бы хотел, чтобы он отображал "letter" ("a", "b", "c "), но в том же окне.

Фактическое значение, которое оно отправляет, может содержать только значение rowid, но для удобства пользователя мне нужны оба.

this.comboBox1.DataSource = this.tblIDSourceBindingSource;
this.comboBox1.DisplayMember = "rowid";
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Name = "comboBox1";
this.comboBox1.ValueMember = "rowid";

Итак, как вы можете видеть, он отображает "rowid". Попытка заставить его отображать "букву" дополнительно сбрасывает все.

Ответы [ 4 ]

3 голосов
/ 21 июля 2009

необходимо переопределить событие форматирования

    // FormatString property is shown in the designer, so you can provide
    // some designer support. If you are not using the desinger then you
    // either set it in the form/control ctor, or use a string directly
    // in the Format event.
    ListControl.FormatString = "{0}/{1}" ;

    private void listBoxCategory_Format(object sender, ListControlConvertEventArgs e)
        {
            e.Value = string.Format(((ListBox)sender).FormatString,
                ((ClassOfListItem)e.ListItem).LongName,
                ((ClassOfListItem)e.ListItem).Key);
    }
2 голосов
/ 21 июля 2009

Предположение: вы не можете просто отобразить «букву» и покончить с этим.

измените ваш процесс так, чтобы вместо

select rowid, letter, blah
from table

сделать что-то вроде

select rowid + ' ' + letter as display, rowid, letter, blah
from table

Или, если вам не нравится пробел, используйте разделитель (ы) по вашему выбору (труба, косая черта, перенос строки в скобках и т. Д.).

затем используйте «display» в качестве вашего DisplayMember.

p.s. если rowid - это int, вам нужно использовать CAST или CONVERT, чтобы сделать его nvarchar или varchar.

p.p.s. если вы не можете изменить свой процесс, то долгий путь заключается в создании легкого объекта, который совпадает с вашим возвращением, но при этом добавьте свойство только для чтения с именем Display, которое получает что-то вроде

return string.Format("{0}{1}{2}", this.rowid, delimiterOfChoice, this.letter);

или что-то в этом роде.

затем просто используйте коллекцию этих сущностей в качестве источника привязки.

0 голосов
/ 08 февраля 2012

Вы должны добавить новое свойство к вашему классу / странице, которое принимает значение двух полей в вашем источнике данных, и назначить отображаемый элемент этому свойству

0 голосов
/ 21 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...