使用C#中的控件进行并行迭代的foreach语句

时间:2013-06-06 07:48:41

标签: c# .net winforms linq

我正在创建一个应用程序,我试图在动态创建的文本框中存储数据库中的值。

我使用的代码是:

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循环来复选框和文本框同时运行而不是彼此运行。

2 个答案:

答案 0 :(得分:2)

删除顶部的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();
            }
        }
    }
} 

答案 1 :(得分:0)

我已经给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();
    }
}