使用强类型数据而不是字符串绑定到下拉列表

时间:2009-11-30 15:30:26

标签: c# asp.net linq-to-sql strong-typing plinqo

鉴于以下课程......

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是一个代码集模板来生成我的数据层) 有人可以帮忙吗?

1 个答案:

答案 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;}
}