我正在尝试运行两个并行的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");
}
这里我试图插入相应复选框已选中的文本框的值 我正在使用的代码只插入最后检查的值 如何为每个复选框及其相应的文本框运行它? 控件是在运行时创建的。
答案 0 :(得分:3)
您可以使用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 Injection),如果输入字符串中存在一些无效字符,则可能会失败
此外,由于它现在代码,sql命令似乎错了。
代码将变量name
(字符串)转换为整数,然后将结果封装成单引号
这就像说接收name
值的数据库字段是文本类型,因此不需要整数转换。
答案 1 :(得分:1)
我会迭代迭代。
循环内圈。
另一种也许更好的方法是将复选框的未使用属性“tag”设置为文本框的相应控件。
链接两个对象非常容易,并且使用正确的方法设计您可以保存两个迭代。
答案 2 :(得分:0)
我看不到你如何将复选框链接到文本框。上层嵌套循环中的“id = name”没有多大意义,因为它不涉及循环变量。我假设你想要一个所有“选中”复选框的列表。这是实现它的一种方法。您可以以相同的方式迭代TextBox,以访问其内容。
var namesOfCheckedBoxes = panel1.Controls.OfType<CheckBox>().Where(cb=>cb.Checked).Select(cb=>cb.Name);
答案 3 :(得分:0)
我试过这个并且有效
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