这是非常简单的linq,我刚刚开始。我已经将问题追溯到3个来源中的一个,但我不确定如何解决它。所以这是代码,我将解释它下面的问题。
XAML绑定:
<ListBox Name="lstJobs" ItemsSource="{Binding Path=Title}" DockPanel.Dock="Top"
MinWidth="150" MinHeight="200" MaxHeight="250"
ScrollViewer.VerticalScrollBarVisibility="Visible"
SelectionChanged="lstJobs_SelectionChanged" />
C#Code Behind(加载窗口的事件):
TMDataContext TMDataBase = new TMDataContext();
lstJobs.ItemsSource = from j in TMDataBase.JobDetails
select j;
结果:
问题: 我知道连接正在运行,因为JobDtail表中只有3条记录。
回到大学时,我们了解到如果ToString方法没有超载以强制它做其他事情,那么类会输出他们的名字。问题是我不想修改L2S生成的类,因为它们是自动生成的,以后任何修改都会丢失。我将进行更改,因此更改自动生成的代码是多余的。
在做L2S之前,我已经构建了数据库,并且使用继承设计了一堆“实体”类,我必须删除这些类,因为它们导致了与L2S类的冲突。 L2S自动生成的类对我来说是非常糟糕的,我希望能够替换它们的属性,构造函数和添加方法。或者至少将它们重命名或扩展到我可以重新实现继承结构的地方。
我使用的方法很简单。 UI的一组类。一组用于处理业务逻辑的“Control”类,以及一组与DB接口的“Entity”类。但是整个L2S自动化类生成通过替换我的实体类来改变我的方式。
无论如何,我的第一个问题是我想在每个记录的列表框中显示作业标题(作业详细信息表中的一个字段)。当在列表框中更改选择时,将访问相关记录并填写一组允许用户编辑该记录的文本框。
对此的任何帮助都会非常有用。提前谢谢。
答案 0 :(得分:3)
您的C#代码背后是覆盖您的XAML绑定。目前它只是在你的对象上调用ToString,因为它不知道要显示哪个属性。在您的XAML中,您需要指定DisplayMemberPath / ValueMemberPath或使用DataTemplate,或者在LINQ中只需要项目列表:
lstJobs.ItemsSource = from j in TMDataBase.JobDetails
select j.Title;
答案 1 :(得分:1)
LinqToSql生成部分类。您可以提供其他部分,并且在dbml设计器重新生成时不会消除它。
这允许您根据需要为这些类添加.ToString。
或者,您可以更改将数据绑定到UI控件的方式。