我需要帮助来调整一下我的逻辑。
如你所见,我有两个foreach loop
,分别对应于网格视图中的不同列。此代码在网格视图中的OnRowUpdating中。要了解更多信息,您可以查看已关闭的线程here
问题是:
在每个循环中,我将更新一行到db,但是因为我有两个不同的循环,所以直到第一个循环结束它才会退出。
举个例子:我有_rpt.Count =2,所以它会在遇到第二个循环之前循环两次。
GridViewRow row = gv.SelectedRow;
Repeater _rpt = gv.Rows[e.RowIndex].Cells[8].FindControl("rptReg") as Repeater;
Repeater _rpt1 = gv.Rows[e.RowIndex].Cells[9].FindControl("rptVisitor") as Repeater;
foreach (RepeaterItem item in _rpt.Items)
{
TextBox _txt = item.FindControl("txtId") as TextBox;
TextBox _txt1 = item.FindControl("txtName") as TextBox;
//update db
}
foreach (RepeaterItem item1 in _rpt1.Items)
{
TextBox _txt3 = item1.FindControl("txtVisitor") as TextBox;
//update db
}
有没有一种方法可以读取两个foreach循环值?
发布于 2011-01-27 16:33:03
如果您正在对多个集合进行循环,并且希望多次访问每个集合,那么foreach
可能不是最合适的。
尝试使用常规的for
循环:
for (int i = 0; i < _rpt.Items.Count; i++)
{
TextBox _txt = _rpt.Items[i].FindControl("txtId") as TextBox;
TextBox _txt1 = _rpt.Items[i].FindControl("txtName") as TextBox;
if (_rpt1.Items.Count > i)
TextBox _txt3 = _rpt1.Items[i].FindControl("txtVisitor") as TextBox;
//update db
}
上面的只会像预期的if (_rpt.Items.Count >= _rpt1.Items.Count)
一样工作,所以一定要检查并使用具有最多项的集合,如果它们要有所不同的话。
使用foreach
循环枚举单个集合中的项,从而允许您在每次迭代中直接引用每个项。如果您只访问一个集合,这很方便,因为您不需要使用数组索引器,只需使用您在循环初始化时给它的名称即可。
当您在循环多个集合时,它不是很方便,因为您只有一个对循环头部中使用的集合的引用。
通过使用for
循环,您可以(使用int
)跟踪您所处的索引位置,从而只需使用标准数组表示法来获取集合中的项。
发布于 2011-01-27 16:21:58
foreach (RepeaterItem item in _rpt.Items)
{
TextBox _txt = item.FindControl("txtId") as TextBox;
TextBox _txt1 = item.FindControl("txtName") as TextBox;
//update db
TextBox _txt3 = _rpt1.Items[item.ItemIndex].FindControl("txtVisitor") as TextBox;
}
https://stackoverflow.com/questions/4818759
复制相似问题