2012-12-19 55 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