同时运行两个foreach迭代c#
本文关键字:两个 foreach 迭代 运行 | 更新日期: 2023-09-27 18:16:56
我正在尝试运行两个并行的foreach
循环
代码:
foreach (Control c in panel1.Controls)
{
if (c.GetType() == typeof(CheckBox))
{
if (((CheckBox)c).Checked)
{
id = name;
}
}
}
if (id != "")
{
foreach (Control cd in panel1.Controls)
{
if (cd.GetType() == typeof(TextBox) && cd.Name == name)
{
val = cd.Text.ToString();
if (val != "")
{
con3.Open();
SqlCommand cmd3 = new SqlCommand("insert into Employee_Ear_Ded values('" + Convert.ToInt32(name) + "','" + Convert.ToInt32(comboBox1.Text) + "','" + drpPayHead.Text + "','" + Convert.ToDouble(val) + "','" + comboBox2.Text + "')", con3);
cmd3.ExecuteNonQuery();
con3.Close();
}
else
{
MessageBox.Show("Please Enter Value");
}
}
}
}
else
{
MessageBox.Show("No Employee Selected");
}
在这里,我试图插入文本框的值,其各自的复选框为Checked。
我使用的代码只插入最后检查的值。
如何为每个复选框及其相应的文本框运行它?
控件在运行时创建。
您只能使用Enumerable扩展名OfType遍历复选框,然后使用相同的语法遍历文本框
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();
}
}
}
}
说了这么多,我真的建议你寻找参数化查询。
构建连接字符串值的数据库命令文本是非常危险的(Sql注入),如果输入字符串
而且,从现在的代码来看,sql命令似乎是错误的。
该代码将变量name
(一个字符串)转换为一个整数,然后将结果括在单引号中。
这就好比说,接收name
值的数据库字段是文本类型的,因此不需要进行整数转换。
我会在迭代中迭代。
循环内循环。
另一种可能更好的方法是将checkbox的未使用属性"tag"设置为文本框的相应控件。
将很容易链接两个对象,并且通过正确的方法设计,您可以保存两个迭代
我不知道你是如何将复选框链接到文本框的。上层嵌套循环中的"id=name"没有什么意义,因为它不涉及循环变量。我假设您想要一个包含所有"已选中"复选框的列表。这是实现它的一种方法。你可以用同样的方法遍历textbox来访问它们的内容。
var namesOfCheckedBoxes = panel1.Controls.OfType<CheckBox>().Where(cb=>cb.Checked).Select(cb=>cb.Name);
我试了一下,它工作了
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();
}
}
}
现在它将值存储在TextBox的数据库中,其各自的CheckBox为Checked