2012-12-19 54 views
3

我有一個動態創建CheckBoxList。在此CheckBoxList內,我有一個嵌套的foreach循環用於驗證用戶輸入。用戶輸入他或她的電子郵件地址。一旦用戶點擊提交,就會創建CheckBoxList。如果用戶的電子郵件與某個主題的訂閱相匹配,則選中該主題旁邊的複選框。我遇到的問題是將原始外部foreach與嵌套的foreach相關聯。動態創建的CheckBoxList中的嵌套的foreach

int i = 0; 
foreach (Topic topic in result) 
{ 
    string topicName = topic.TopicArn.ToString().Split(':').Last(); 
    ListItem li = new ListItem(topicName, topic.TopicArn); 
    checkBoxList1.Items.Add(li); 

    foreach (Subscription subscription in subs) // where topic equals current 
               // topic in original foreach? 
    { 
     if (txtEmail.Text == subscription.Endpoint) 
      checkBoxList1.Items[i].Selected = true; 
    } 
    i++; 
} 

我想我也許可以使用LINQ到條件添加到nested foreach循環,但我一直無法把它所有尚未在一起。

+0

......這是什麼問題? –

回答

1

您必須先創建所有複選框,然後才能開始評估是否應該檢查它們。在上面的代碼中,創建一個Listitem,然後循環所有訂閱,以便在複選框列表中創建第二個Listitem之前,它將在該循環中跳出限制。

foreach (Topic topic in result) 
{ 
    string topicName = topic.TopicArn.ToString().Split(':').Last(); 
    ListItem li = new ListItem(topicName, topic.TopicArn); 
    li.Selected = subs.Any(s => s.Endpoint == txtEmail.Text && s.TopicArn == topic.TopicArn); 
    checkBoxList1.Items.Add(li); 
} 
+0

我很欣賞這種迴應,因爲通常你會完全正確!我需要更清楚。每個主題可以有多個訂閱者。對於每個主題,我需要檢查用戶的電子郵件是否與任何訂戶匹配。然後,我需要增加計數器並重復下一個主題。上面的代碼會引發一個'ArgumentOutOfRangeException'因爲有4個訂閱和3個主題('CheckBoxList'項目)。這是一個非常好的開始,所以感謝你的幫助。 – EFeit

+0

好吧,現在我已經修改了我的答案來解決您的問題,用一個foreach循環與一個linq expresseion來檢查端點和txtEmail之間的匹配,並且如果它發現匹配返回true。 –

+0

完美!我稍微修改了你的答案,以確保我們測試的主題和訂閱是相關的。不夠感謝你! – EFeit