嵌套集合或自定义对象的GridView DataKeyNames

时间:2011-08-11 04:45:16

标签: c# asp.net gridview custom-object

我正在使用自定义对象绑定到GridView。

假设我有一系列汽车公司(奥迪,福特,宝马等)。每个Company对象都有Id,Name,Country等属性

每家公司还有一个汽车收藏。每辆车都有Id,Model,Year等属性

我想将此信息绑定到GridView。

所以我正在检索公司的查询,并且在每个汽车收集的第一个对象中,有一辆汽车的数据(对象模型是这样的,因为在其他情况下我必须列出公司的所有汽车)。 / p>

将Gridview绑定到Companies集合时没有问题。我可以列出每个公司以及我要展示的每个汽车信息。

当我想设置DataKeyNames时出现问题。我想用每辆车的Id(不是每家公司的Id)来设置比较汽车。

我正在尝试这样的事情:

GridViewCompanies.DataSource = companies;
GridViewCompanies.DataKeyNames = new string[] { "Cars[0].Id" };

但它不起作用,它说它不包含名称的属性。

有没有办法设置它?

我不想将Gridview绑定到Cars集合,因为如果我这样做,我会错过每个公司的信息,我也需要使用公司的属性。

非常感谢。

1 个答案:

答案 0 :(得分:1)

试一试:

var carCompanyList = new[]
                    {
                      new { Id = 1, Name = "Audi", Cars = new[] { new { Id = 10, Model = "Audi_Model_1" }, new { Id = 12, Model = "Audi_Model_2" } } }, 
                      new { Id = 2, Name = "Ford", Cars = new[] { new { Id = 20, Model = "Ford_Model_1" }, new { Id = 22, Model = "Ford_Model_2" } } }
                    };

var gridViewData = from carCompany in carCompanyList
                    select new
                            {
                              carCompany.Id,
                              carCompany.Name,
                              firstModelId = carCompany.Cars == null || carCompany.Cars.Count() == 0 ? 0 : carCompany.Cars.First().Id
                            };

CarModelGridView.DataSource = gridViewData;
CarModelGridView.DataKeyNames = new [] { "firstModelId" };
CarModelGridView.DataBind();