2015-11-12 12 views
0

好吧,我有一個多對多的關係是這樣的:如何在數據控件(如FormView)中顯示錶的導航屬性?

Walk = {WalkID, title, ...., (Navigation Properties) Features} 
Feature = {FeatureID, featureName, description, (Navigation Properties) DogWalks} 

我當然有一個結表,但EF假定這個因而它不是在我的EDMX圖所示:

WalkFeatures = {WalkID, FeatureID} //junction, both FK 

所以使用LINQ和EF,我現在試圖抓住Walk的功能WalkID=xx

這是我formview

<asp:FormView ID="FormView1" runat="server" ItemType="Walks.DAL.Walk" SelectMethod="FormView1_GetItem"> 
    <ItemTemplate> 
     <h1><%# Item.Title %></h1> 
     ... 
    </ItemTemplate> 
</asp:FormView 
<asp:Label ID="lbFeatures" runat="server" Text="Label"></asp:Label> 

而且selectMethod:

public Walks.DAL.Walk FormView1_GetItem([QueryString("WalkID")] int? WalkID) 
{ 
    using (WalkContext db = new WalkContext()) 
    { 
    var walk = (from n in db.Walks.Include("Features") 
       where n.WalkID == WalkID 
       select n).SingleOrDefault(); 

    foreach(var f in walk.Features){ 
     lbFeatures.Text += f.FeatureName + "<br/>"; 

    } 
    return walk; 
    }   
} 

的代碼運行正常,但就是沒有辦法,我可以直接顯示Walk.Featuresformview相當的<ItemTemplate>內的方式比使用標籤和循環?該屬性是否可以像.aspx頁面中的其他屬性一樣直接綁定?

+0

但是,您的標籤控制'lbFeatures'不在'FormView'裏面,您希望數據源如何在控件之外工作? –

+0

@RahulSingh是的,這是真的,如上所述,代碼在當前設置中運行良好。但是必須有一種方法來顯示'中的所有內容,而不是依靠外部標籤。另外請注意我不能移動模板內的標籤,因爲它給了我一個編譯錯誤(當前代碼看不到它)。 – gudthing

+0

檢查我的答案,可能這可能會幫助你。 –

回答

1

我也用這個新功能並不廣泛,但只是把它的這種特殊情況一個嘗試,這是我所: -

只需從FormView1_GetItem方法返回walk和不操縱你的標籤控制那裏。現在,您可以使用Repeater控件來顯示lbFeatures控制(因爲它會動態地重複)是這樣的: -

<ItemTemplate> 
    <h1><%# Item.Title %></h1> 
    <asp:Repeater ID="lbFeatures" runat="server" DataSource='<%# Item.Features%>'> 
     <ItemTemplate> 
      <asp:Label ID="lblTest" runat="server" 
        Text='<%# Eval("FeatureName") %>'></asp:Label> 
      <br /> 
    </ItemTemplate> 
    </asp:Repeater> 
</ItemTemplate> 

正如你可以看到我能夠repater控制datasouce指定爲Item.Features,然後使用傳統的方法來綁定標籤。這看起來乾淨而簡單:)

+1

非常感謝您的幫助,這非常適合我以後的工作。 +1,你的例子完美無缺。謝謝:) – gudthing

+0

嗨,我想知道你是否可以再次幫助我。同樣的情況,但這次是我的圖像的「一對多關係」。我如何才能在多個窗體中顯示單個圖像?我已經設法正確地列出使用您的轉發器的方法的圖像,但如果我只想從集合中取出1項,我應該使用什麼方法?在此先感謝 – gudthing

+1

@gudthing - 因爲'Features'是一個可以使用LINQ'First()'方法的項目集合,所以''asp:Label ID =「lblFeatureName」runat =「server」Text ='< %#Item.Features.First()。FeatureName%>'>' –

相關問題