2009-11-30 1 views
0

Учитывая следующий класс ....Использование сильно типизированных данных, а не строку для привязки к выпадающего списка

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, который является набором кодов-шаблонов для создания моего datalayer) Может ли кто-нибудь помочь?

ответ

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

EDIT: колонка Я ссылаюсь на атрибут yourcunstom, а не на Linq. Хорошо, я должен был назвать его MappingColumn, он может быть объявлен следующим образом:

public class MappingColumnAttribute : System.Attribute 
{ 

    public string Type {get;set;} 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^