2015-01-09 2 views
1

몇 시간 동안이 주제를 연구 중이므로 저에게 적합한 솔루션을 찾을 수 없습니다. WPF 행 유효성 검사 기본 키 필드

나는 (은 MSDN 데모로 매우 동일한 방식으로) 코드에서 개체 목록을 표시하는 데이터 그리드를 사용하는 간단한 WPF 프로그램

내 데이터가 SQL 데이터베이스에서 가져온에 배치되어 있습니다 제외 (http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.rowvalidationrules%28v=vs.110%29.aspx : 나는 정확히이 구조 MSDN의 예제와 일치하는 공공 재정에 ValidationResult 유효성 검사() 메소드를 포함하는 ValidationRule 클래스를 설정 한

public PersonInfo() 
{ 
    InitialiseComponent(); 
    LoadPeopleFromSQL(); 
} 

public void LoadPeopleFromSQL() 
{ 
    DataSet ds = GetDataSet(SQLConnectionString); 
    List<PersonInfo> personList = new List<PersonInfo>(); 
    foreach(DataRow row in ds.Tables[0].Rows) 
    { 
     personList.Add(new PersonInfo(row[0], row[1], row[2])); 
    } 
PersonDataGrid.ItemsSource = personList; 

: 아래와 같이 데이터 그리드에 바인딩 된 개체의 목록 그건 내 'Pers' 코스 '객체'라기보다는 객체) 지금 수행 데이터 그리드에있는 항목의 나머지 부분을 통해 검색하고 확인 PersonInfo.ID 필드가되지 않았는지 확인하고 싶은 것 그러나

public class CourseValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, 
     System.Globalization.CultureInfo cultureInfo) 
    { 
     Course course = (value as BindingGroup).Items[0] as Course; 
     if (course.StartDate > course.EndDate) 
     { 
      return new ValidationResult(false, 
       "Start Date must be earlier than End Date."); 
     } 
     else 
     { 
      return ValidationResult.ValidResult; 
     } 
    } 
} 

//Xaml snippet 
<DataGrid.RowValidationRules> 
    <local:CourseValidationRule ValidationStep="UpdatedValue"/> 
</DataGrid.RowValidationRules> 

에 중복되었습니다. 이 코드는 다음과 같습니다. http://www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples#valid_dataset

그러나이 예제에서는 BindingGroup 개체가 클래스 개체가 아닌 datarow를 반환 할 것으로 예상합니다.

BindingGroup 개체에 '소유자'라는 속성이 있고 데이터row가 포함 된 것으로 나타났습니다. 그러나 .net 4 사용하고 '소유자'속성에 액세스 할 수 없습니다.

내 기본 키의 유효성을 검사하는 방법을 보여줄 수 있습니까? 또는 .net 4 내에서 BindingGroup.Owner 속성에 액세스하는 데 도움이됩니다 (내 문제를 해결할 수 있다고 생각합니다).

답변

0

여기에서 문제는 내 기본 작업 클래스의 전체 사용자 목록을 DataRowValidation 클래스로 옮기는 것이 었습니다.

나는 DataRow 개체에 바인딩 할 수있는 방법을 찾을 수 없습니다로

, 나는 DataRowValidation 클래스 내부의 공용 속성을 배치하고 내 메인 클래스에서 사람들의 현재 목록을 작성 :

public class DataRowValidation : ValidationRule 
{ 
    public List<PersonInfo> People {get; set;} 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     if (value is BindingGroup) 
     { 
      BindingGroup group = (BindingGroup)value; 
      People = PersonClass.personList; 

      //Code to loop through list and test for duplicates 
     } 
    } 
}