最初に背景:私はVS2010でASP.NET Dynamic Dataプロジェクトを作成しました。既定では、FieldTemplatesフォルダー内のChildren.ascxファイルは、エンティティの子を表示するときにハイパーリンクを表示します。リンクをクリックすると、別のテーブルの別のWebページに移動します。私の特定の目的のために、これは望ましくない。彼らはすべて集団的に私の目的のための記録を作るので、私は親のページの右の子供をインラインにしたいと思います。ナビゲーションプロパティであるASP.Net GridViewでエンティティコレクションを編集することはできますか?
私が行ったことは、Children.ascxファイルを変更し、ハイパーリンクをGridViewに置き換えたことでした。コードは次のようになります。
<asp:GridView ID="gridView1" runat="server" DataKeyNames="ID"
DataSource="<%#FieldValue%>" AutoGenerateEditButton="True"
AutoGenerateDeleteButton="true" OnRowEditing="GridView1_RowEditing"
OnRowCreated="GridView1_RowCreated"
HeaderStyle-CssClass="th" CellPadding="6">
<EmptyDataTemplate>
There are currently no items in this table.
</EmptyDataTemplate>
</asp:GridView>
重要な部分は、フィールドテンプレートからの「FieldValue」プロパティです。これが渡されるエンティティコレクションです。OnRowEditingイベントでは何も起こりません。処理されなかったときに不平を言って、ハンドラを配置しました。
私がプロジェクトを実行すると、うまく表示されます。子コレクションは、私が望むようにGridViewにレンダリングされます。しかし、いずれかの行の「編集」ボタンをクリックすると、すべての列が消えます。行はまだ存在しているので、GridViewにはデータがあることがわかっているように見えますが、列は自動的に生成されません(ただし、上記のコードには列挙されていません)。私はGridViewsがナビゲーションプロパティのプロパティにバインドできないことを発見しました。たとえば、Table1にナビゲーションプロパティTable2がある場合、Table2.Column1にバインドできません.Evalを使用する必要があります。しかし、この問題が回避されるなら、このケースでは、GridViewにエンティティコレクション全体を供給しているので、私は疑問に思っていました。だから私の質問が出てくるところです。私の設定では、GridViewを編集できるようにすることは可能ですか、それともSOLですか?
これができない場合は、ダイナミックデータサイトで私がやっていること(1ページにすべて親と子供を編集する)を達成するための推奨方法は何ですか?私は、複数のEntityDataSourcesをページにドロップして、それらの子のGridViewを別々にマップすることができますが、私のテストでは、自分のマスターテーブルが自動的にその子をロードすることがわかりました。すでに存在するデータを読み込むために、新しいEntityDataSourcesを作成するのは無駄だと思われます。さらに、1つのEntityDataSourceを使用すると、すべてのデータが自動的に関連付けられ、ワンショットで更新されます。