如何在下拉列表控件中显示程序的名称和ID

本文关键字:ID 程序 显示 下拉列表 控件 | 更新日期: 2023-09-27 17:50:40

我的项目显示的程序名称从数据库到下拉列表,每个程序都有一个ID。我想在下拉列表中同时显示name和id,以便它们能够相互区分。加州生命线(CLA)"加州生命线"是这个项目的名称,id是"CLA"。我已经创建了一个存储过程,它根据程序ID显示数据。

这是我的下拉列表控件的代码

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");
}

顺便说一下,下拉菜单是pagcontrol的一部分。

感谢您的帮助

如何在下拉列表控件中显示程序的名称和ID

如果你的GlobalFetchFromDB()返回一个对象的实例,你可以"扩展"作为一个部分类,那么我会添加一个"助手"属性的类格式显示字符串

这样做的一个好处是,该格式可以依赖于实例中其他属性的值。

例如:

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

则使用_drp_program.DataTextField = "DisplayName";

另一种方法是构造一个类来封装返回的项,并添加DisplayName作为装饰器。

不将_drp_program绑定到dsprg,而是在dsprg中循环遍历结果并单独添加每个项。

foreach(dsprgObject in dsprg)
{
   _drp_program.Items.add(new ListItem(dsprgObject .ColA + " " + dsprgObject .ColB, dsprgObject.PROGRAM_ID));
}

你可以试试

_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;

通常最快的方法是在SQL查询中连接ID和NAME(但是您使用的是sp,所以这有点困难)。此外,由于您在代码中绑定控件,因此可以在代码中连接ID和Name,并手动填充下拉列表(通过调用Items。插入或通过将下拉框绑定到一个集合,该集合的成员具有包含连接值的字段/属性)。AFAIK,你只能为DataTextField和DataValueField指定一个字段/属性名,没有表达式等…