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)を使用しています。誰か助けてもらえますか?

4

1 に答える 1

2

これを行うカスタム属性を作成します

internal class Metadata
{
    [MappingColumn (Type="Key")]
    public int ContractId { get; set; }
    [Required]
    [MappingColumn (Type="Name")]
    public string Name { get; set; }
}

この署名で 2 つのメソッドを作成します

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

編集:私が参照する列属性は、Linq のものではなく、yourcunstom 属性です。わかりました、MappingColumn と呼ぶべきでした。次のように宣言できます。

public class MappingColumnAttribute : System.Attribute 
{

   public string Type {get;set;}
}
于 2009-11-30T15:39:43.543 に答える