我正在尝试为 Winforms Datagrid 创建一个流畅的界面。这应该允许我使用类型化的数据源并轻松使用属性的属性(Order.Custom.FullName)
我在初始化时添加列并尝试设置要在那里使用的属性:
dgv.With<Order>().Column("Client Name").On(x => x.Client.FullName);
然后在设置数据源时提出原始问题:
dgv.SetTypedDatasource<T>(IList<Order> orders)
这里的一个大问题是通用控件是不可能的(我猜),所以不能为类指定 T,但必须为每个方法指定......
我想根据 lambda 表达式中的给定属性创建一个匿名类型列表:
就像是:
ProcessList<Client>(clientList, x => x.FullName);
是否有可能做这样的事情:
[编辑] 请注意,在实践中,表达式将更早设置,并将在其他地方获取......
public void ProcessList<T>(IList<T> sourceList, Expression<Func<T, object>> expression)
{
var list =
(from T x
in sourceList
select new { expression })
.ToList();
// process list .... grid.DataSource = list;
}
所以,我想根据给定的表达式创建匿名类型。我知道我可以评估该表达式以检索正确的属性。
我有点卡住了,这样的事情可能吗?
有任何想法吗?