DataBind to ICollection<T>
本文关键字:gt to lt DataBind ICollection | 更新日期: 2023-09-27 17:56:05
我的程序应该从旧版平面文件中读取和处理数据。
我将数据读入private ICollection<transaction> transactions;
public class transaction
{
public int transactionNum;
public DateTime transactionDate;
public int orderNum;
public string customerName;
public Decimal amount;
}
如何创建此ICollection<T>
的DataSource
(或其 LINQ 查询),以便可以向其DataBind
多个控件值?
注意:我对 LINQ 的了解很少。 过去,我只需将数据库表拖到我的应用程序中即可。
从您的评论中:
在 ASP.NET 窗体上,我有一个名为 customerCheckL 的复选框列表。后 加载数据文件时,代码应填充 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
获取唯一列表。您只需要设置DataSource
,DataTextField
和DataValueField
并DataBind
CheckBoxList
即可。
var customerComparer = new TransactionCustomerComparer();
customerCheckL.DataSource = transactions.Distinct(customerComparer);
customerCheckL.DataTextField = "customerName";
customerCheckL.DataValueField = "transactionNum";
customerCheckL.DataBind();