【发布时间】:2014-05-14 22:32:58
【问题描述】:
我正在使用 Entity Framework 将一个组合框与我的 MSSQL 数据库中的值组合在一起,使用以下方法
using (var context = new Entity())
{
var things = (from p in context.Stuff
where ((p.SourceId == StuffId && p.Domain.Value == "Stuff")
|| (p.SourceId == OtherStuffId && p.Domain.Value == "OtherStuff"))
&& p.Done == true orderby p.StuffId
select p);
foreach(var stuff in things)
cboRejectTask.Items.Add(stuff.StuffId + ": " + stuff.StuffType.Description + " " + stuff.StuffType.DisplayName);
}
我想为每一行分配值,以便在获取用户选择的内容时,我不必进行字符串操作来获得我想要的内容。如果可能,我不想使用数据源。
解决方案:
鉴于没有比创建自定义类更好的方法了,我继续使用所选答案的代码进行了修改以供长期使用。 (注意:你真的可以使用任何给定的对象,只要 ToString() 返回“显示文本”并且它有一个 Tag 或任何与你的需要兼容的可写属性)
public class ComboBoxItem
{
public string Display;
public object Value;
public override string ToString()
{
return Display;
}
}
鉴于此代码,我现在可以将代码更改为以下内容:
using (var context = new Entity())
{
var things = (from p in context.Stuff
where ((p.SourceId == StuffId && p.Domain.Value == "Stuff")
|| (p.SourceId == OtherStuffId && p.Domain.Value == "OtherStuff"))
&& p.Done == true orderby p.StuffId
select p);
foreach(var stuff in things)
cboRejectTask.Items.Add(new ComboBoxItem() { Display = stuff.StuffId + ": " + stuff.StuffType.Description + " " + stuff.StuffType.DisplayName, Value = stuff.StuffId });
}
【问题讨论】:
-
一些控件有一个可能有用的
.Tag属性。但由于每个单独的项目都不是一个控件,我不确定这是否有效。您可以直接将对象添加到Items并使用DisplayMember属性来选择您要显示的内容(ValueMember属性也可能有用)。
标签: c# winforms entity-framework