0

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

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

每家公司还拥有一系列汽车。每辆车都有 ID、型号、年份等属性。

我想将此信息绑定到 GridView。

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

将 Gridview 绑定到 Companies 集合时没有问题。我可以列出我想显示的每家公司和每辆汽车的信息。

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

我正在尝试这样的事情:

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

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

有什么方法可以设置吗?

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

非常感谢。

4

1 回答 1

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();
于 2011-08-11T06:09:37.377 回答