DataBind到ICollection <t> </t>

时间:2013-01-24 16:05:25

标签: c# asp.net datasource

我的程序应该从旧版平面文件中读取和处理数据。

我将数据读入private ICollection<transaction> transactions;

public class transaction
{
    public int transactionNum;
    public DateTime transactionDate;
    public int orderNum;
    public string customerName;
    public Decimal amount;
}

如何为此DataSource创建ICollection<T>(或对其进行LINQ查询),以便DataBind可以{{1}}多个控制值?

注意:我的LINQ知识很少。过去,我可以将数据库表拖到我的应用程序中。

1 个答案:

答案 0 :(得分:1)

来自你的评论:

  

在ASP.NET表单上,我有一个名为customerCheckL的CheckBoxList。上   加载数据文件时,代码应填充customerCheckL.Items   使用不同客户名称列表。我怎么做?   customerCheckL.DataSourceID = ???

这更有意义。您可以实现一个EqulityComparer<transactions>类,按客户进行比较:

public class TransactionCustomerComparer : IEqualityComparer<transaction>
{
    public bool Equals(transaction x, transaction y)
    {
        if (x == null || y == null) return false;
        return x.customerName == y.customerName;
    }

    public int GetHashCode(transaction obj)
    {
        if (obj == null) return int.MinValue;
        return obj.customerName.GetHashCode();
    }
} 

(请注意,您可以在允许传递自定义比较器的所有Enumerable方法中使用此方法)

然后,您可以使用Distinct获取唯一列表。您只需将DataSourceDataTextFieldDataValueField以及DataBind设置为CheckBoxList

var customerComparer = new TransactionCustomerComparer();
customerCheckL.DataSource = transactions.Distinct(customerComparer);
customerCheckL.DataTextField = "customerName";
customerCheckL.DataValueField = "transactionNum";
customerCheckL.DataBind();