将对象列表绑定到DataGrid

本文关键字:DataGrid 绑定 列表 对象 | 更新日期: 2024-09-22 16:23:54

我正在尝试将对象列表绑定到紧凑框架上的DataGrid。这就是我所拥有的:

public class Order
{
    //Other stuff
    public Customer Customer
    {
        get { return _customer; }
    }
}
public class Customer
{
    //Other stuff
    public string Address
    {
        get { return _address; }
    }
}

现在,我想将DataGrid绑定到订单列表,并只显示某些属性(客户的地址就是其中之一):

List<Order> orders = MethodThatGetsOrders();
datagrid.DataSource = orders;
datagrid.TableStyles.Clear();
DataGridTableStyle ts = new DataGridTableStyle();
ts.MappingName = orders.GetType().Name; //This works OK
DataGridTextBoxColumn tb = new DataGridTextBoxColumn();
tb.MappingName = orders.GetType().GetProperty("Customer").GetType().GetProperty("Address").Name; //Throws NullRef
ts.GridColumnStyles.Add(tb);
datagrid.TableStyles.Add(ts);

如何在DataGridTextBoxColumn上显示客户地址
感谢

将对象列表绑定到DataGrid

在处理绑定之前,我会形成一个视图模型(或者更好的是一个适配器),并获得一个可以轻松绑定的平面模型:

public class OrderViewModel
{
    private Order _order;
    public string Address 
    {
        get { return _order.Customer.Address; }
    }
    // similar with other properties
    public OrderViewModel(Order order)
    {
        _order = order;
    }
}

要生成ViewModelList,请执行以下操作:

List<OrderViewModel> viewModels = yourList.Select(m=> new OrderViewModel(m)).ToList();

简单地绑定:

YourGridView.Datasource = new BindingSource(viewModels, null);