0

カスタム オブジェクトを使用して GridView にバインドしています。

自動車会社 (Audi、Ford、BMW など) のコレクションがあるとします。各 Company オブジェクトには、Id、Name、Country などのプロパティがあります。

各会社には、車のコレクションもあります。各車には、ID、モデル、年などのプロパティがあります。

この情報を GridView にバインドしたいと思います。

そこで、Company のクエリを取得し、各 Cars Collection の最初のオブジェクトには 1 台の車のデータがあります (他のシナリオでは、Company のすべての車をリストする必要があるため、オブジェクト モデルはこのようなものです)。

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 に答える