2009-11-30 36 views
0

this.entityModel.Entities是我的datagrid(agdatagrid)的來源。我有AutoGenerateColumns="False"。 我在我的agdatgrid更好的解決方案,取代foreach循環或改進它

我想第6列6列取決於column..ie的數據可見,如果該列的任何行包含的數據,那麼它應該是可見的,如果沒有的行包含該列的數據,它應該是不可見的。

所以我寫了一個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

首先看看你正在寫什麼的邏輯。你正在檢查一個集合的計數是否在迭代它的循環中大於零;這將始終返回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; 
    } 
} 

所以你要指定數據源多次,從來沒有設置Visible爲假,而我想你實際上試圖寫是這樣的:

// 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; 
    } 
} 

另外,使用LINQ,這可以寫成以下,達到同樣的事情,但表現得更加明顯:

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

我將與linq查詢一直到我的理解LINQ查詢將更快然後foreach循環..感謝你真棒回答 – Malcolm 2009-11-30 11:38:16

0

我不是一個Silverlight開發者,但你爲什麼在foreach循環檢查「this.entityModel.Entities.Count> 0」?當你進入循環時,我會認爲計數總是> 0,不是嗎?

+0

即使沒有該列的行數據,我也不想顯示該列。所以計數是0,它會阻止列。 所以爲了避免這種情況,我使用了this.entityModel.Entities.Count> 0 – Malcolm 2009-11-30 11:17:52

+0

也許它是Silverlight特有的,但是循環結束了this.entityModel.Entities的集合,並且在循環中檢查了這個集合中元素的數量。我的理解是,只有實際存在元素時纔會進入循環,因此.Count> 0的檢查是多餘的。 雖然我可能在這裏完全錯誤。 – Michael 2009-11-30 11:27:48

1

我不是這方面的專家......但是你爲什麼每次都重置DataSource?

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

是的,它是更肥胖,然後更早:) – Malcolm 2009-11-30 11:21:38

相關問題