2011-12-15 50 views
1

首先背景:我在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,所有數據將自動關聯並更新爲一次。

回答

0

的父子關係被定義最有可能在您的EDMX。動態數據然後使用基於該關係的兒童字段模板。

需要兩個自定義控制,一個用於顯示(Children.ascx)和一個用於插入(Children_Insert.ascx)。不過,我會獨自離開這兩個文件和添加兩個新:像ChildrenGrid.ascx和ChildrenGrid_Insert.ascx和元數據引用這些

[UIHint("ChildrenGrid")] 
相關問題