首先背景:我在VS2010中創建了一個ASP.NET動態數據項目。默認情況下,FieldTemplates文件夾中的Children.ascx文件在顯示實體的子項時顯示超鏈接。當您點擊鏈接時,您可以導航到其他表格的單獨網頁。對於我的具體目的而言,這是不可取的。我想在孩子的父頁面上插入孩子,因爲他們都爲我的目的共同創造了一個記錄。是否可以在導航屬性中編輯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無法綁定到導航屬性的屬性。例如,如果我使用導航屬性Table2的Table1,我不能綁定到Table2.Column1,我必須使用Eval。然而,我想知道,因爲在這種情況下,如果這個問題會被繞過,我會向GridView提供一個完整的實體集合。所以這就是我的問題來了。鑑於我的設置,是否有可能讓GridView允許編輯或我是SOL?
如果這是不可能的,什麼是要完成我在動態數據網站做(編輯父母和孩子都在一個頁面上),建議這樣做?我知道我可以在頁面上放置多個EntityDataSources,並且將單獨的GridViews映射到這些孩子,但在我的測試中,我發現我的主表會自動加載它的子項。似乎有點浪費,以創建新的EntityDataSources來加載已經存在的數據。另外,使用一個EntityDataSource,所有數據將自動關聯並更新爲一次。