2011-08-30 6 views
0

이것은 매우 간단한 linq이며 방금 시작했습니다. 문제를 3 개의 소스 중 하나로 추적했지만 해결 방법을 모르겠습니다. 그래서 여기에 코드가 있습니다. 그리고 나는 그 아래의 문제를 설명 할 것입니다.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 자동 생성 클래스는 저에게 아주 이상적이며 속성, 생성자를 바꾸고 메소드를 추가 할 수 있기를 바랍니다. 또는 적어도 내 이름을 바꾸거나 상속 구조를 구현할 수있는 곳에 어딘가에서 확장하십시오.

사용하는 방법은 간단합니다. UI 용 클래스 세트입니다. 비즈니스 로직을 처리하는 "Control"클래스 집합과 DB와 인터페이스 할 "Entity"클래스 집합. 하지만 전체 L2S 자동화 된 클래스 생성은 내 엔티티 클래스를 대체하여이 작업을 진행하고 있습니다.

어쨌든 첫 번째 문제는 각 레코드의 목록 상자에 작업 제목 (작업 세부 정보 테이블 한 필드 형식)을 표시하려고합니다. 목록 상자에서 선택이 변경되면 관련 레코드가 액세스되고 사용자가 해당 레코드를 편집 할 수있는 텍스트 상자를 채 웁니다.

정말 도움이 될 것입니다. 미리 감사드립니다.

답변

3

C# 코드가 XAML 바인딩보다 우선합니다. 현재 표시 할 속성을 모르기 때문에 개체에서 ToString을 호출하는 중입니다. 당신의 XAML에서, 하나는 DataTemplate을을 DisplayMemberPath/ValueMemberPath을 지정하거나 사용할 필요하거나 LINQ 단지 문자열 목록 프로젝트 :이 팁

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

'DisplayMemberPath = "Title"'을 그냥 추가하십시오. 여전히 JobDetails 객체를 바인딩해야하지만 작업 세부 객체의 Title 속성을 표시해야합니다. – thoean

+0

감사합니다. 그리고 빠른 응답. –

+1

물론 각 레코드에 대해 전체 JobDetail 객체 인스턴스를 가져 오거나 수화하는 것이 아니라 제목 만 투사하는 경우에는 세부 정보의 나머지 부분이 아니라 제목 만 있으면 전체 작업 공간과 성능이 향상됩니다. –

1

LinqToSql은 부분 클래스를 생성합니다. 다른 파트를 제공 할 수 있으며 dbml 디자이너가 다시 생성 할 때 닦아지지 않습니다.

이렇게하면 원하는 경우 해당 클래스에 .ToString을 추가 할 수 있습니다.

또는 UI 컨트롤에 데이터를 바인딩하는 방법을 변경할 수 있습니다.

+0

감사합니다. 부분 수업에 대해 좀 더 살펴볼 것입니다. 이게 내가 원하는 상속 구조를 할 수있게 해주고, 내 속성을 재정의하고 추가하고 메소드를 추가하게합니다.당신은 나에게 어떻게 말해야하는지, 나 스스로 연구 할 수는 있지만 연구를 시작하기 전에 가능한지 알고 싶다. 귀하의 답변에 감사드립니다. –

+1

예. 재미있게 보내십시오. designer.cs를 검사하십시오. 주의 사항 : 추가 멤버에 매핑 속성이 없으면 해당 멤버는 SQL에 대한 변환이 없으므로 데이터베이스 쿼리에 사용하면 안됩니다 (런타임 오류). –