2012-08-04 242 views
0

請看下面的代碼。我有另一個foreach循環,但是當我運行頁面行重複。有什麼辦法可以停止重複行。 下面的代碼和結果:嵌套的foreach循環停止重複

![<div class="itemContent"> 
<table cellspacing="0" cellpadding="0" class="productspecstable" style="float: right"> 
    <tbody> 
     <!-- B:07L --> 
     @foreach(var row in select) 
     { 
      foreach(var rows in selects) 
      { 
       <tr> 
        <td>@rows.Specifications</td> 
        <th>@row.LaptopOptions</th> 
       </tr> 
      } 
     } 
    </tbody> 
</table> 
</div> 

enter image description here

+3

一般內環是** **依賴於外部的.. – 2012-08-04 17:20:14

+0

什麼是你希望它做什麼? – 2012-08-04 17:31:38

回答

1

內環重複外部循環的每一次迭代。然而,你不能在兩個列表上同步迭代,因爲foreach只關心一個列表,而在那個循環內,你不知道列表中的哪個位置(所以你不能與第二個列表同步)。

可能的解決方案:

1)如果所選從[S]可以用索引進行訪問,使用一個for循環遍歷這兩個(只要它們進行排序以同樣的方式):

for(int idx=0;idx<select.Count;idx++) 
{ 
    ... 
    @select[idx].Specifications 
    ... 
    @selects[idx].LaptopOptions 
    ... 
} 

2)儘量減少與一個選擇幾個值(在代碼中貼出代碼之前),那麼你只需要一個foreach循環:

foreach (var row in select) 
{ 
    ... 
    @row.Specifications 
    ... 
    @row.LaptopOptions 
    ... 
} 
+0

考慮Metro Smurf的答案 - 您可能需要過濾內部循環中的值以僅打印特定行類型的值(因此您只列出當前選項的規格)。我的答案只有在兩個列表中包含相同數量的項目時纔有效;即如果每個規格不能有多於一個的選項 – FrankB 2012-08-12 09:18:54

0

內環必須是你的外循環,因爲一臺筆記本電腦Ø ption可以有多個規格

  foreach(var rows in selects){ 
foreach(var row in select){ 
1

我不是很確定你要實現與最終的佈局是什麼,但是從你的形象,我想你正在尋找沿着呈現出頭的東西線爲規格,然後所有的筆記本電腦選項。如果是這樣的話,那麼你就需要這樣的東西:

@foreach(var row in select){ 

    <tr> 
     <th>@row.LaptopOptions</th> 
    </tr> 

    foreach(var rows in selects){ 

     <tr> 
      <td>@rows.Specifications</td> 
     </tr> 

    } 
}