我一直googling 3天,並找不到可用的答案,我希望有人可以幫助我。外鍵查找下拉列表EF 6
我開始與這個優秀的教程:
http://www.asp.net/web-forms/tutorials/data-access/model-binding/retrieving-data
我想延長這一項目讓「學年」要查找到另一個數據庫中的表,而不是一個枚舉。我驚訝地發現使用.net 4.5,VS 2013,EF 6和Dynamic字段來演示這個例子有多困難。
所以,這裏是我做了什麼:
1)增加了一個名爲 「歲月」 的新表的數據庫(YearID TINYINT PK,YearName VARCHAR)。用可能的值填充該表。
2)在重命名從年級學生YearID一致性領域中,我將其改爲TINYINT,創建Students.YearID和Years.YearID之間的關係
3)改變了SchoolContext以包括新的表:
public DbSet<Year> Years { get; set; }
4)增加了年類,如下所示:
public class Year
{
public byte YearID { get; set; }
public string YearName { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
5)學生類中刪除學年的東西,取而代之這些行:
public byte YearID { get; set; }
public virtual Year Year { get; set; }
6)變更的表單上的場,以顯示新鏈接YearID:
<asp:DynamicField DataField="YearID" />
(最後)的問題:YearID示出了作爲一個文本框,而不是一個下拉列表中,我無法弄清楚如何解決這個問題。當它是一個枚舉時它工作得很好,但作爲一個查找沒有好處。當它被定義爲一個枚舉,它有這樣的註釋:
[EnumDataType(typeof(AcademicYear)), Display(Name = "Academic Year")]
public AcademicYear Year { get; set; }
有沒有告訴動態控制,從年表中獲取其數據所需的類似註解?據我所知,這整件事很神祕,沒有證件。
我在某處讀到你應該使用鏈接字段的名稱,而不是其他任何東西,所以我將Dymanic字段上的DataField更改爲「Year」,而不是「YearID」。當我這樣做時,控件呈現「System.Data.Entity.DynamicProxies.Year_9D4E99 .........」。
當然,我的ForeignKey_Edit.ascx文件保持默認狀態,即顯示下拉列表。
我希望我在這裏錯過了一些非常明顯的東西。
感謝
謝謝,這對我們幫助很大,但現在「年」欄出現在gridview中作爲鏈接,我不知道這是從哪裏來的。我也不知道爲什麼這是如此複雜 - 這似乎是一個非常普遍的事情(提供從另一個實體的數據輸入字段的查找)。我錯過了什麼 - 是否有更好的方式爲用戶提供查找/下拉控件? – user3311566
您可以自定義外鍵在datagrid中顯示的方式,以更改文件\ dynamicdata \ FieldTemplates \ ForeignKey.ascx。它實際上呈現爲超鏈接。您可以用標籤或文字替換它。 – motta
hey @ user3311566它在Gridview中,默認爲只讀模式,在GridView或formview中添加autogenerateeditbuttons = true,然後單擊編輯,它會根據預期變成下拉菜單 –