在下拉列表中显示两个数据字段的内容,然后在单击时隐藏一个

Display two data fields' content in dropdownlist then hide one on clicking

所以我想要做的是,当您单击下拉列表时,它会显示下拉列表中的两个项目。左侧显示ID,右侧显示文本。

所以看起来像 (98739 | Smoker) 然后当你点击你想要的项目时,下拉列表将只显示 "Smoker"

我试过了

 string sqlGetClass = "select [code], [SnoMedCode] + ' | ' + [Descrip] as [fullDescrip] from LT__SmokingStatus";
        SqlCommand cmdSmoke = new SqlCommand(sqlGetClass, con);
        con.Open();
        SqlDataAdapter da = new SqlDataAdapter(cmdSmoke);
        DataSet ds = new DataSet();
        da.Fill(ds);
        ddlSmokeStat.DataSource = ds;
        ddlSmokeStat.DataTextField = "fullDescrip";
        ddlSmokeStat.DataValueField = "Code";
        ddlSmokeStat.DataBind();
        con.Close();

效果很好,在下拉列表中显示 (98739 | Smoker)。但是无论如何我都想知道在我选择该项目后从那里隐藏 98739 代码。我知道我正在设置它并调用它。那么还有其他方法可以按照我的意愿将它们组合起来吗?

首先,我对标题进行了一些编辑以阐明任务(您没有隐藏列表中的其他项目,而只是 selected 项目的一部分)。

基于该假设,最直接的解决方案是 re-query 修改 select SQL 语句的相同控件,例如:"select [code], [Descrip] from LT__SmokingStatus" 并相应地修改 DataTextField 绑定如:ddlSmokeStat.DataTextField = "Descrip";

此外,您需要在 post-backs 之间持久化 Selected 项(例如,在 Session 变量中),然后在绑定后显示 selected 。否则,您可以通过 Microsoft AJAX 实现 partial/conditional 网页渲染(使用 UpdatePanel 并指定下拉触发器事件)。

有更有效的解决方案(例如,将数据字段的内容存储在List或Array中,或者Dictionary并将Dropdown控件绑定到该数据结构,如文章所述:Binding-ASP-NET-DropDownList) , 但它需要大量的代码修改。

此外,可以通过在 HTML Select 元素上使用 Javascript 代码片段来完成此任务,该元素由 ASP.NET Drop-down 控件呈现,但该解决方案如果 Javascript 在客户端的计算机上被禁用,将无法工作。

希望这可能有所帮助。 最好的问候,

我个人会通过 JavaScript、一个 jQuery 示例来完成此操作:

$('#<%= Sample.ClientId %>').blur(function () {
     var content = $('#<%= Sample.ClientId %> > option:selected').text().split('|');
      $('#<%= Sample.ClientId %> > option:selected').text(content)
});

这将是一种简单的方法,否则您将需要锚定到回发。然后包裹在更新面板中或执行某种形式的 Ajax 以通过服务器端处理。