2011-08-30 36 views
0

這是非常簡單的linq,我剛剛開始。我已將問題追溯到三個來源之一,但不知道如何解決問題。所以這裏是代碼,我會解釋它下面的問題。Linq to Sql沒有給出正確的數據

XAML綁定:

<ListBox Name="lstJobs" ItemsSource="{Binding Path=Title}" DockPanel.Dock="Top" 
       MinWidth="150" MinHeight="200" MaxHeight="250" 
       ScrollViewer.VerticalScrollBarVisibility="Visible" 
       SelectionChanged="lstJobs_SelectionChanged" /> 


C#代碼隱藏(窗口中加載事件):

TMDataContext TMDataBase = new TMDataContext(); 

lstJobs.ItemsSource = from j in TMDataBase.JobDetails 
         select j; 

結果:

enter image description here

問題: 我知道連接正在工作,因爲JobDtail表中只有3條記錄。

回到大學,我們瞭解到,如果ToString方法沒有超載以強制其他操作,那麼類會輸出它們的名字。問題是我不想修改由L2S生成的類,因爲它們是自動生成的,任何修改都會在以後丟失。我將進行更改,以便對自動生成的代碼進行更改是多餘的。

在做L2S之前,我建立了數據庫,還有一些「實體」類都是使用繼承來設計的,我必須刪除它們,因爲它們與L2S類發生衝突。 L2S自動生成的類對我來說已經很難了,我希望能夠替換它們的屬性,構造函數和添加方法。或者至少重命名或將它們擴展到整潔的地方,我可以重新實現我的繼承結構。

我使用的方法很簡單。用戶界面的一組類。一組「控制」類來處理業務邏輯,以及一組「實體」類來與數據庫連接。但是整個L2S自動化類的生成通過替換我的實體類來解決這個問題。

無論如何,我的第一個問題是我想在每個記錄的列表框中顯示作業標題(一個字段形成作業詳細信息表)。當選擇在列表框中改變時,相關記錄將被訪問,並將填入一堆文本框,以允許用戶編輯該記錄。

任何幫助,這將是真正appreicated。提前致謝。

回答

3

您的C#代碼覆蓋您的XAML綁定。目前它只是在您的對象上調用ToString,因爲它不知道要顯示哪個propery。在你的XAML中,你需要指定DisplayMemberPath/ValueMemberPath或者使用DataTemplate,或者在你的LINQ項目中列出一個字符串:

lstJobs.ItemsSource = from j in TMDataBase.JobDetails 
         select j.Title; 
+1

只需添加'DisplayMemberPath =「標題」'。這應該仍然綁定您的JobDetails對象,但顯示作業詳細信息對象的Title屬性。 – thoean

+0

謝謝你,它的工作。併爲快速響應。 –

+1

當然,如果您只需要標題而不是其他細節信息,那麼如果您只投影標題,而不是爲每條記錄提取和保存整個JobDetail對象實例,則內存佔用和性能會更好。 –

1

LinqToSql生成部分類。您可以提供其他部分,並且在dbml設計器重新生成時不會被擦除。

這允許你添加一個.ToString到這些類,如果你喜歡。

或者,您可以更改將數據綁定到UI控件的方式。

+0

感謝這個提示。我會查看更多關於部分課程的內容。這會讓我做我想要的繼承結構,並讓我重寫並添加自己的屬性並添加方法。你不必告訴我如何,我可以自己研究,但我只想知道在我開始研究之前是否有可能。感謝您的回答。 –

+1

是的。玩的開心。檢查designer.cs。警告:如果附加成員沒有映射屬性,那些成員將不會對SQL進行任何翻譯,並且不應該用於對數據庫的查詢(運行時錯誤)。 –