Как отобразить имя и идентификатор программы в элементе управления Dropdownlist - PullRequest
0 голосов
/ 19 апреля 2011

Мой проект отображает имена программ из базы данных в раскрывающемся списке, и у каждой программы есть идентификатор.Я хочу отобразить имя и идентификатор в раскрывающемся списке, чтобы их можно было отличить друг от друга.Например: «Калифорнийская линия жизни» (CLA), где «Калифорнийская линия жизни» - это название программы, а идентификатор - «CLA».Я создал хранимую процедуру, которая отображает данные на основе идентификатора программы.

Это код моего элемента управления в выпадающем списке.

private void LoadProgramName()
{
    _drp_program = (DropDownList)Page.FindControl("bodyuc$drp_program");

    dsprg = rProxy.GlobalFetchFromDB(strCountyName, "DBO.oea_sp_get_onoff_programNames");

    _drp_program.DataSource = dsprg;
    _drp_program.DataTextField = "PROG_NAME";
    _drp_program.DataValueField = "PROGRAM_ID";
    _drp_program.DataBind(); ;

    ListItem lst_prog = new ListItem();
    lst_prog.Value = "";
    lst_prog.Text = "--Select One--";
    _drp_program.Items.Insert(0, lst_prog);
    _drp_program.Items.Insert(1, "ALL");

}

Кстати, раскрывающийся список является частью pagecontrol.

Справка оценена.

Ответы [ 4 ]

0 голосов
/ 19 апреля 2011

Обычно самый быстрый способ - объединить ID и NAME в запросе SQL (но вы используете sp, так что это немного сложно).Кроме того, поскольку вы привязываете свой элемент управления в коде, вы можете объединить идентификатор и имя в коде и заполнить свой раскрывающийся список вручную (либо вызвав Items.Insert, либо связав раскрывающийся список с коллекцией, члены которой имеют поле / свойство, содержащее объединенное значение).).AFAIK, вы можете указать только имя поля / свойства для DataTextField и DataValueField, без выражений и т. Д. *

0 голосов
/ 19 апреля 2011

Вместо привязки _drp_program к dsprg, просматривайте результаты в dsprg и добавляйте каждый элемент отдельно.

foreach(dsprgObject in dsprg)
{
   _drp_program.Items.add(new ListItem(dsprgObject .ColA + " " + dsprgObject .ColB, dsprgObject.PROGRAM_ID));
}
0 голосов
/ 19 апреля 2011

Вы можете попробовать

_drp_program.DataSource = from item in dsprg
                            select new
                            {
                                PROG_NAME = string.Format("{0}({1})", item.PROG_NAME, item.PROGRAM_ID) ,
                                PROGRAM_ID = item.PROGRAM_ID
                            };

вместо

 _drp_program.DataSource = dsprg;
0 голосов
/ 19 апреля 2011

Если ваш GlobalFetchFromDB () возвращает экземпляры объекта, который вы можете «расширить» как частичный класс, то я бы добавил свойство «помощник» к классу, который форматирует отображаемую строку.

OneПреимущество этого заключается в том, что формат может зависеть от значений других свойств в экземпляре.

Например:

public partial class ProgramItem
{
    public string DisplayName { get { return PROG_NAME.ToUpper(); } }
}

Затем использовать _drp_program.DataTextField = "DisplayName";

Anальтернативой является создание класса, который инкапсулирует возвращаемые элементы и добавляет DisplayName в качестве декоратора.

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