C# 对象的下拉列表
如何从对象绑定DropDownlist DataText或DataValue字段。 当所述对象处于第二级时,例如,要绑定的对象不在返回的对象Users.ContactDetails.Telephone的第一级,因为下面的代码不起作用:C# 对象的下拉列表,c#,.net,drop-down-menu,C#,.net,Drop Down Menu,如何从对象绑定DropDownlist DataText或DataValue字段。 当所述对象处于第二级时,例如,要绑定的对象不在返回的对象Users.ContactDetails.Telephone的第一级,因为下面的代码不起作用: ddl.DataSource = dal.dal_Users.GetAllUsers(); ddl.DataTextField = "Telephone"; 我尝试了一系列的想法,但似乎找不到关于是否可以这样做的任何信息。如果您使用的是C#3,那么您可以使用Co
ddl.DataSource = dal.dal_Users.GetAllUsers();
ddl.DataTextField = "Telephone";
我尝试了一系列的想法,但似乎找不到关于是否可以这样做的任何信息。如果您使用的是C#3,那么您可以使用ConvertAll
etension方法创建一个新的匿名类型,将内部属性上移到顶层
试着这样做:
IEnumerable<User> users = dal.dal_Users.GetAllUsers();
ddl.DataSource = users.ConvertAll(u =>
new { Value = u.Name, Telephone = u.ContactDetails.Telephone });
ddl.DataTextField = "Telephone";
IEnumerable users=dal.dal_users.GetAllUsers();
ddl.DataSource=users.ConvertAll(u=>
新{Value=u.Name,Telephone=u.ContactDetails.Telephone});
ddl.DataTextField=“电话”;
编辑:关于这个话题,我得到了足够多的反馈,觉得值得一试
在将域对象绑定到ddl控件时,我采用的一种方法是从contr中有重载的基类继承,以便只允许原始控件的文本/值“子集”。下面的代码用于抽象ddl控件的模型视图演示器或模型视图模型实现,这样您就可以将任何UI推到该业务代码的顶部
下面是我如何将ddl与一组用户对象绑定,并根据相关对象(工作单元)设置所选对象的示例。
这个基类还应该实现ILookupDTO-因为这将迫使您公开本例中用户对象使用的文本和值属性
public interface ILookupDTO
{
string Text {
get;
set;
}
string Value {
get;
set;
}
}
下面是在这个答案顶部的bind方法中使用的LookupCollection定义
public class LookupCollection
{
private readonly IEnumerable<ILookupDTO> dtos;
private ILookupList mList;
public LookupCollection(IEnumerable<ILookupDTO> dtos)
{
this.dtos = dtos;
}
public void BindTo(ILookupList list)
{
mList = list;
mList.Clear();
foreach (ILookupDTO dto in dtos) {
mList.Add(dto);
}
}
public int SelectedIndex {
get { return mList.SelectedIndex; }
set { mList.SelectedIndex = value; }
}
public string SelectedValue {
get { return mList.SelectedValue; }
set { mList.SelectedValue = value; }
}
}
现在,在您的代码隐藏中,您需要在视图的只读属性中执行类似操作
public interface ILookupList
{
void Add(ILookupDTO dto);
void Clear();
int Count();
int SelectedIndex {
get;
set;
}
string SelectedValue {
get;
set;
}
}
返回新的WebLookupList(DDL用户)
这里是一个特定于web的ddl的实现
public class WebLookupList : ILookupList
{
private readonly ListControl listControl;
public WebLookupList(ListControl listControl)
{
this.listControl = listControl;
}
public void Clear()
{
listControl.Items.Clear();
}
public void Add(Interfaces.ILookupDTO dto)
{
listControl.Items.Add(new ListItem(dto.Text, dto.Value));
}
public int Count()
{
return listControl.Items.Count;
}
public int SelectedIndex {
get { return listControl.SelectedIndex; }
set { listControl.SelectedIndex = value; }
}
public string SelectedValue {
get { return listControl.SelectedValue; }
set { listControl.SelectedValue = value; }
}
}
以下是特定于WPF的ddl的实现
如果使用wpf,视图的只读属性看起来像-返回新的WPFLookupList(ddlUsers)
您一次只需要其中一个,但我认为显示这两个将有助于明确我们正在抽象的内容
因为这是一个巨大的答案,我可以发布一个示例项目供下载,如果需要的话,可以显示它的运行情况-让我知道,我可以看到在.Net 2.0中实现这一点的唯一方法是这样的
List<Users> userList = dal_Users.GetAllUsers();
foreach (Users u in userList )
{
ListItem li = new ListItem();
li.Text = u.ContactDetails.Telephone;
li.Value = u.userID.ToString();
ddl.Items.Add(li);
}
ddl.DataBind();
List userList=dal_Users.GetAllUsers();
foreach(用户列表中的用户u)
{
ListItem li=新的ListItem();
li.Text=u.ContactDetails.phone;
li.Value=u.userID.ToString();
ddl.Items.Add(li);
}
ddl.DataBind();
ConvertAll不是扩展方法,存在于.NET 2.0中。这是列表中的一个方法。Select()如下所述。
public interface ILookupList
{
void Add(ILookupDTO dto);
void Clear();
int Count();
int SelectedIndex {
get;
set;
}
string SelectedValue {
get;
set;
}
}
public class WebLookupList : ILookupList
{
private readonly ListControl listControl;
public WebLookupList(ListControl listControl)
{
this.listControl = listControl;
}
public void Clear()
{
listControl.Items.Clear();
}
public void Add(Interfaces.ILookupDTO dto)
{
listControl.Items.Add(new ListItem(dto.Text, dto.Value));
}
public int Count()
{
return listControl.Items.Count;
}
public int SelectedIndex {
get { return listControl.SelectedIndex; }
set { listControl.SelectedIndex = value; }
}
public string SelectedValue {
get { return listControl.SelectedValue; }
set { listControl.SelectedValue = value; }
}
}
public class WPFLookupList : ILookupList
{
private readonly ComboBox combobox;
public WPFLookupList(ComboBox combobox)
{
this.combobox = combobox;
}
public void Add(Interfaces.ILookupDTO dto)
{
ComboBoxItem item = new ComboBoxItem();
item.Content = dto.Text;
item.Tag = dto.Value;
combobox.Items.Add(item);
}
public void Clear()
{
combobox.Items.Clear();
}
public int Count()
{
return combobox.Items.Count;
}
public int SelectedIndex {
get { return combobox.SelectedIndex; }
set { combobox.SelectedIndex = value; }
}
public string SelectedValue {
get { return combobox.SelectedValue.Tag; }
set { combobox.SelectedValue.Tag = value; }
}
}
List<Users> userList = dal_Users.GetAllUsers();
foreach (Users u in userList )
{
ListItem li = new ListItem();
li.Text = u.ContactDetails.Telephone;
li.Value = u.userID.ToString();
ddl.Items.Add(li);
}
ddl.DataBind();