foreach语句使用c#中的控件进行并行迭代
本文关键字:控件 并行 迭代 语句 foreach | 更新日期: 2023-09-27 18:17:05
我正在制作一个应用程序,我试图从动态创建的文本框中存储数据库中的值。
我使用的代码是:
CheckBox clickedBtn = sender as CheckBox;
name = clickedBtn.Name;
foreach (CheckBox c in panel1.Controls.OfType<CheckBox>())
{
if (c.Checked)
{
foreach(TextBox cd in panel1.Controls.OfType<TextBox>())
{
string val = cd.Text;
if (val != "" && cd.Name == name)
{
con3.Open();
SqlCommand cmd3 = new SqlCommand("insert into.....", con3);
cmd3.ExecuteNonQuery();
con3.Close();
}
}
}
}
这段代码是工作的,但它只在数据库中输入最后一次选中的值,次数与选中的复选框数量一样多,我想发送所有文本框的值,其各自的复选框被选中。
基本上我试图运行foreach循环的复选框和文本框同时运行,而不是在彼此。
删除顶部的name = clickedBtn.Name;
,并在if (c.Checked)
中执行
foreach (CheckBox c in panel1.Controls.OfType<CheckBox>())
{
if (c.Checked)
{
var name = c.Name;
foreach (TextBox cd in panel1.Controls.OfType<TextBox>())
{
string val = cd.Text;
if (val != "" && cd.Name == name)
{
con3.Open();
SqlCommand cmd3 = new SqlCommand("insert into.....", con3);
cmd3.ExecuteNonQuery();
con3.Close();
}
}
}
}
我对Damith做了+1,他的答案是正确的,只是你可以优化你的代码
foreach (var name in from c in panel1.Controls.OfType<CheckBox>() where c.Checked select c.Name)
{
foreach (TextBox cd in panel1.Controls.OfType<TextBox>().Where(cd => cd.Text != "" && cd.Name == name))
{
con3.Open();
SqlCommand cmd3 = new SqlCommand("insert into.....", con3);
cmd3.ExecuteNonQuery();
con3.Close();
}
}