2009-06-09 8 views
0

combox 열 (ID는 실제 값이고 Desc는 값임)이있는 WPF DataGrid가 있으며 해당 열의 머리글을 클릭하면 실제 값 (ID)에 따라 자동 정렬됩니다. 표시된 값별로 정렬하고 싶습니다.WPF DataGrid ComboBox 필드로 정렬

내 WPF DataGrid에는 IdPerson, DescSchool, IdSchool 및 School의 4 개 열이 있습니다. 열 "School"은 다음 값으로 구성된 comboBox입니다. ItemSource = schoolTable.DefaultView, SelectedValueBinding = 새 바인딩 ("IdSchool"), SelectedValuePath = "IDSchool", DisplayMemberPath = "DescSchool"

schoolTable은 IDSchool 및 DescSchool. 이 테이블은 콤보 상자의 데이터 소스로 사용됩니다.

SortMemberPath = "DescSchool"로 설정했을 때 솔루션을 시도했는데 처음에는이 기능이 작동했습니다 - 콤보 상자 열의 머리글을 클릭하면 표시된 값으로 정렬됩니다 (다른 열 값을 읽었 기 때문에). 진정한 가치가 아닙니다. 그러나 콤보 상자의 값을 변경하면 "DescSchool"열의 값은 여전히 ​​동일하므로 더 이상 제대로 정렬되지 않습니다.

아이디어가 있으십니까?

답변

1

DataGridComboBoxColumnSortMemberPath="Desc" (또는 귀하의 재산을 부름)을 설정하는 것이 트릭을 수행해야합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 시도했고 그 해결책은 내가 편집 된 초기 게시물에서 설명했던 동기들에 대해 나를 위해 작동하지 않는다. –

0

또한이 문제가 있고 정렬되는 형식에 IComparable을 구현해야했습니다. 그래서 귀하의 경우에는 학교 유형이라고 생각합니다. 에서 IComparable 내에서 this를 반환 :

return this.Desc.CompareTo((obj as School).Desc); 

죄송합니다 ...이 나는 일이 얻을 수 있었던 유일한 방법이며, 응답의 부족에 의해 판단, 많은없는 사람들은 더 좋은 방법을 알고있다.

또한 유형에 대한 액세스 권한이있는 경우에만 작동합니다. 이것이 (예를 들어 Entity Framework와는 달리) 데이터 테이블 또는 이와 비슷한 것이라면이 솔루션은 작동하지 않습니다.

0

WinForm과 그리드의 콤보 박스 열에 관계형 데이터를 표시하는 DataGridView로 비슷한 문제가 발생했습니다. 열을 정렬하고 싶지만 정렬은 DisplayMember (표시되는 텍스트 필드)가 아닌 ValueMember (int ID 필드)로 정렬됩니다. 입력 된 데이터 집합을 사용하여 해당 형식이 지정된 테이블을 DataView에 배치하고 해당 DataView를 BindingSource의 데이터 소스로 사용합니다.이 데이터 소스는 그리드의 데이터 소스였습니다. :-)

웹에서 여러 게시물을 읽은 후 나에게 도움이 된 해결책은 다음과 같습니다. Typed 데이터 세트의 코드 숨김에서 기본 입력 테이블의 Typed Row에 사용자 정의 속성을 추가했습니다. .

예 : 내 입력 데이터 집합의 인스턴스가있는의 WinForm의 코드 숨김에서

 public string ProvinceAtRow 
     { 
      get 
      { 
       string result = string.Empty; 
       if (!this.CustomerInfoRow.IsProvinceDescriptionNull()) 
       { 
        result = this.CustomerInfoRow.ProvinceDescription; 
       } 
       return result; 
      } 
     } 

다음으로,이 유형이 지정된 테이블에 DataColumn에 추가. 예 (의 WinForm의로드 이벤트 코드) 데이터 세트의 데이터가있는 경우

 this.DSGrowth.LocalGrowthFactor.Columns.Add(
      new DataColumn("Province", typeof(string))); 

다음에 첨가하고, 컬럼 (들)을 작성한다. 예 :

  //if we have data then have to fill in the colums we added to the TDS 
     if (this.DSGrowth.LocalGrowthFactor.Rows.Count > 0) 
     { 
      //fill columns so that can display on datagrid as columns that can be sorted 
      // ref http://www.daniweb.com/forums/thread283915.html 
      Array.ForEach<dsLocalGrowthFactor.LocalGrowthFactorRow>(     this.DSGrowth.LocalGrowthFactor.Rows.OfType<dsLocalGrowthFactor.LocalGrowthFactorRow>().ToArray(), 
       row => 
       { 
        row["Province"] = row.ProvinceAtRow; 
       } 
      ); 

      //accept changes on TDS so not to be prompted to save changes 
      this.DSGrowth.AcceptChanges(); 
     } 

     //set default sort 
     DataView dvFactors = new DataView(this.DSGrowth.LocalGrowthFactor); 
     dvFactors.Sort = "GrowthFactor DESC"; 
     this.BSLocalGrowth.DataSource = dvFactors; 

     this.DgvGrowth.DataSource = this.BSLocalGrowth; 
     if (this.DgvGrowth.Rows.Count > 0) 
     { 
      //select first row 
      this.BSLocalGrowth.MoveFirst(); 
      this.DgvGrowth.Rows[0].Selected = true; 
     } 

더 이상 ComboBox 열과 정렬이 작동하지 않습니다!

희망이 있으면 비슷한 상황에있는 모든 사람들이 도움이되기를 바랍니다.

1

최근에 유사한 문제가 발생합니다.

SortMemberPath="School.DescSchool" 

그것은 당신이나 다른 사람을 도움이 될 것입니다 희망 :

같은 것을 시도!