2009-11-30 4 views
0

this.entityModel.Entities은 내 datagrid(agdatagrid)의 출처입니다.foreach 루프를 교체하거나 수정하는 것이 더 나은 솔루션

나는 AutoGenerateColumns="False"을 유지했습니다. 나는 6 열을 내 agdatgrid

그 열의 데이터에 따라 6 번째 열을 표시하고 싶습니다. 그 열의 모든 행에 데이터가 포함되어 있으면 표시되어야하며 표시되지 않아야합니다. 행에는 보이지 않아야하는 해당 열의 데이터가 들어 있습니다.

그래서 foreach 루프를 작성했지만 데이터가 클 경우 ui가로드되는 데 더 많은 시간이 걸립니다. 다른 방법이 있습니까?

foreach (BrowserEntity _browseEntity in this.entityModel.Entities) 
{ 
      if (_browseEntity.State != null && this.entityModel.Entities.Count>0) 
      { 
       this.grid.DataSource = this.entityModel.Entities; 
       this.grid.Columns[6].Visible = true; 
       break; 
      } 
      else 
      { 

       this.grid.DataSource = this.entityModel.Entities; 
       this.grid.Columns[6].Visible = false; 
      } 
} 

답변

2

처음 쓰는 글의 논리를 살펴보십시오. 컬렉션을 반복하는 루프 내에서 컬렉션의 수가 0보다 큰지 확인하고 있습니다. 컬렉션에 아무것도 포함되어 있지 않으면 루프가 실행되지 않으므로 항상 true를 반환합니다. 그래서 당신이 실제로 작성하는 것은이 일 때 하나 항상 true를 반환 또는 어느 제거 실행할 수 없습니다 코드 :

foreach (BrowserEntity _browseEntity in this.entityModel.Entities) 
{ 
    if (_browseEntity.State != null) 
    { 
     this.grid.DataSource = this.entityModel.Entities; 
     this.grid.Columns[6].Visible = true; 
     break; 
    } 
} 

그래서 당신이 여러 번 데이터 소스를 지정하고, false로 Visible를 설정하는 일은 없습니다 나는 당신이 실제로 쓰기 위해 노력하고 무엇을 생각하는 반면,이 같은 것입니다 : Linq에를 사용하여, 또는

// bind the grid but hide column 6 
this.grid.DataSource = this.entityModel.Entities; 
this.grid.Columns[6].Visible = false; 

// if there is any state then show column 6 
foreach (BrowserEntity _browseEntity in this.entityModel.Entities) 
{ 
    if (_browseEntity.State != null) 
    { 
     this.grid.Columns[6].Visible = true; 
     break; 
    } 
} 

,이이 같은 일을 달성하지만 훨씬 명확 다음과 같이 작성할 수 있습니다 :

this.grid.DataSource = this.entityModel.Entities; 
this.grid.Columns[6].Visible = this.entityModel.Entities.Any(e => e.State != null); 
+0

나는 linq 쿼리로 갈 것입니다 내 이해 linq 쿼리가 빠른 teh foreach 루프 될 것입니다 .. u는 r 끝내 답변 주셔서 감사 Logged – Malcolm

0

이 나는 ​​실버 라이트 개발자 아니지만, 왜 당신은 foreach 루프에서 "this.entityModel.Entities.Count> 0"을 확인합니까? 루프를 입력 할 때 카운트가 항상> 0이라고 가정합니다.

+0

해당 열의 행 데이터가없는 경우에도 열을 표시하고 싶지 않습니다. 그래서 카운트는 0이고 그것은 열을 dislays. 그래서 this.entityModel.Entities.Count> 0 – Malcolm

+0

을 사용하고 있습니다. 아마 Silverlight에만 한정되어 있지만 루프는 this.entityModel.Entities의 컬렉션에 있고 루프 내에서이 컬렉션의 요소 수를 확인합니다 . 내 이해는 실제로 요소가있을 때만 루프로 이동하므로 .Count> 0에 대한 검사가 불필요합니다. 내가 완전히 틀릴 수도 있지만. – Michael

1

저는 전문가는 아니지만 ... 매번 데이터 소스를 재설정하는 이유는 무엇입니까?

bool isColumnVisible = false; 
this.grid.DataSource = this.entityModel.Entities; 
foreach (BrowserEntity _browseEntity in this.entityModel.Entities) 
{ 
      if (_browseEntity.State != null && this.entityModel.Entities.Count>0) 
      { 
       isColumnVisible = true; 
       break; 
      } 
} 
this.grid.Columns[6].Visible = isColumnVisible; 

나는 이것이 더 빨라야한다고 생각한다. 적어도 나는 그렇게 바란다.

+0

예 그것은 fatser 다음 이전 : – Malcolm

관련 문제