2011-08-11 14 views
0

私はカスタムオブジェクトを使用してGridViewにバインドしています。GridView DataKeyネストされたコレクションまたはカスタムオブジェクトの名前

私は自動車会社(アウディ、フォード、BMWなど)のコレクションを持っているとします。各Companyオブジェクトには、Id、Name、Countryなどのプロパティがあります。

各社には、Collection of Carsもあります。各車には、ID、モデル、年などのプロパティがあります。

この情報をGridViewにバインドします。

私はCompaniesのクエリを取得しており、各車のコレクションの最初のオブジェクトには1台の車のデータがあります(オブジェクトモデルは他のシナリオでは会社のすべての車をリストする必要があるためです)。

GridviewをCompaniesコレクションにバインドするときに問題はありません。私は、私が見せたいと思っている各社と各車の情報を列挙することができます。

DataKeyNamesを設定するときに問題が発生します。私は車を比較するために、各車のID(各社のIDではなく)で設定したいと思います。

私はこのような何かしようとしていた:

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

をしかし、それは動作しません、それは名前のプロパティが含まれていませんと言います。

設定方法はありますか?

GridviewをCarsコレクションにバインドするのではなく、私がそのようにすれば、私は各社の情報を見逃してしまい、会社のプロパティも使う必要があるからです。

多くのありがとうございます。

答えて

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(); 
+0

ありがとうございました。基本的にすべてを新しいコレクションにコピーしています。私はその解決方法を避けたかったのです。他の選択肢はありますか?ありがとう! – delavega

+0

あなたは大歓迎です。私は残念なことに、DataKeyNamesは式ではなく名前のリストであると思います(MSDNを参照)。おそらく、クラスCarCompaniesを変更する必要があります。特に、Idプロパティを明示的に追加してください。 GridViewは、準備されたデータを期待しています。私たちはそれを調理する必要があります:) – vladimir77

+0

更新するだけで、私はcarクラスにcompanyとcompanyIDとcompanyNameにアクセスするためのプライベートプロパティを追加しました。このようにして、構造体car.Company.IDとcar.Company.Nameを作成し、datakeynamesプロパティcar.CompanyIDとcar.CompanyName(両方ともcar.CompanyIDとcar.CompanyNameへの参照)を使用できます。 – delavega

関連する問題