2011-08-30 43 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进行任何翻译,并且不应该用于对数据库的查询(运行时错误)。 –