2011-04-19 45 views
0

我的项目显示的程序名称从数据库到下拉列表中,每个程序都有一个ID。我想在下拉列表中显示名称和ID,以便它们可以相互区分。 例如:'california lifeline(CLA)' 其中'california lifeline'是程序的名称,id是'CLA'。我创建了一个存储过程,根据程序ID显示数据。如何在Dropdownlist控件中同时显示程序的名称和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"); 

} 

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

帮助被评价。

+0

嘿@user我读了一些你的问题,我们编程的东西看起来很相似,利润。只是觉得这有点奇怪。如果没有太多的信息要提供,你的工作是为哪个公司做的? – Earlz 2011-06-17 19:49:13

回答

0

如果你的GlobalFetchFromDB()返回一个对象的实例,你可以“扩展”为一个分类,那么我会添加一个“helper”属性给格式化你显示的字符串的类。

这样做的一个优点是格式可以取决于实例中其他属性的值。

例如:

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

然后使用_drp_program.DataTextField = "DisplayName";

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

0

不是将_drp_program绑定到dsprg,而是循环访问dsprg中的结果并单独添加每个项目。

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

只有当您不需要稍后访问SelectedItem作为从GlobalFetchFromDB()返回的对象的实例时,也可以。您已经丢失了所有返回对象的信息,而不是ID值。 – 2011-04-19 17:26:41

0

您可以尝试

_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

它给了我这个错误消息:无法找到源类型'System.Data.DataSet'的查询模式的实现。 '选择'未找到。 – userstackoverflow 2011-04-19 18:00:20

0

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

相关问题