鉴于以下课程......
namespace IMTool.Data
{
public partial class AllContracts
{
internal class Metadata
{
public int ContractId { get; set; }
[Required]
public string Name { get; set; }
}
}
}
并给出以下内容。
using (var context = new IMToolDataContext())
{
ddlContracts.DataValueField = "ContractId";
ddlContracts.DataTextField = "Name";
ddlContracts.DataSource = context
.AllContracts
.OrderBy(o => o.Name);
ddlContracts.DataBind();
}
如何强烈键入下拉列表DataValue和DataText字段?基本上我不想使用字符串,而是使用实体的列名,我使用的是LinqToSql(PLinqo是一个代码集模板来生成我的数据层) 有人可以帮忙吗?
答案 0 :(得分:2)
创建自定义属性以执行此操作
internal class Metadata
{
[MappingColumn (Type="Key")]
public int ContractId { get; set; }
[Required]
[MappingColumn (Type="Name")]
public string Name { get; set; }
}
使用此签名创建两个方法
string GetKeyColumName(Type type) //will perfom a loop on the type properties custom attribute and return the first with the type Key
string GetNameColumnName(Type type)//will perfom a loop on the type properties custom attribute and return the first with the type Name
并像这样填充你的ddl:
using (var context = new IMToolDataContext())
{
ddlContracts.DataValueField = GetKeyColumnName(typeof(Metadata));
ddlContracts.DataTextField = GetNameColumnName(typeof(Metadata));
ddlContracts.DataSource = context
.AllContracts
.OrderBy(o => o.Name);
ddlContracts.DataBind();
}
编辑: 我引用的列属性是yourcunstom属性,而不是来自Linq的属性。好吧我应该称之为MappingColumn,它可以像这样声明:
public class MappingColumnAttribute : System.Attribute
{
public string Type {get;set;}
}