C#ASP.NET - 填充组合框以显示数据源中的两个值?

时间:2009-07-21 15:05:28

标签: c# asp.net combobox

我有一个组合框,但我希望它能从数据源中显示两个不同的列值。

所以不要简单地用“rowid”(可能的值“1”,“2”,“3”等)填充它,我希望它显示“字母”(“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 个答案:

答案 0 :(得分:3)

您需要覆盖Format事件

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

答案 1 :(得分:2)

假设:你不能只显示“字母”并完成它。

将你的过程改为,而不是

select rowid, letter, blah
from table

做类似

的事情
select rowid + ' ' + letter as display, rowid, letter, blah
from table

或者如果您不喜欢这个空格,请使用您选择的分隔符(管道,斜线,括号中的rowid等)。

然后使用“display”作为您的DisplayMember。

P.S。如果rowid是int,则需要使用CAST或CONVERT使其成为nvarchar或varchar。

p.p.s。如果你不能改变你的proc,那么漫长的方法是创建一个与你的返回相同的轻实体,但添加一个名为Display的只读属性,其get类似于

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

或那种性质的东西。

然后只使用这些实体的集合作为绑定源。

答案 2 :(得分:0)

作为一种快速而肮脏的黑客攻击,一旦从数据库中填充新列,就应该能够为数据表添加新列。遍历表格,构建要为每行显示的字符串,并将其粘贴到新列中。然后绑定它以显示该值。

答案 3 :(得分:0)

您应该在您的类/页面中添加一个新属性,该属性获取数据源中两个字段的值,并将displaymember分配给此属性