在Panel中循环通过TextBox

时间:2014-07-17 19:38:46

标签: c# asp.net sql-server textbox panel

我有一个包含5个文本框的面板,我试图遍历Panel并将文本框的值插入数据库(如果它不是0)。

我的面板名称是Panel1 老实说,我不知道从哪里开始或如何在包含文本字段的Panel中循环,任何建议都表示赞赏:

这是我的尝试,它不编译(我不知道如何编写循环通过面板循环)

const string query = "INSERT INTO deductible (number) VALUES (@yes)";
using (var command = new SqlCommand(query, conn))
{
foreach (Panel1 c in this.Controls)
{
    if (c.ToString() != "0")
    {
        command.Parameters.AddWithValue("@yes", c.Text);
        command.ExecuteNonQuery();
    }
}

我还附上了Panel1的截图。 谢谢。enter image description here

3 个答案:

答案 0 :(得分:4)

简单的答案是

foreach(Control control in this.Controls) { 
    if (control is TextBox) {
        // The code here ...
    }
}

问题是你需要确保文本框循环的顺序是正确的,这增加了更多的维护工作,这是完全没必要的。更好的方法是学习数据绑定。或者更简单地说,只需命名文本框并直接指定它们即可。我认为这两种方法都比使用循环更好。

答案 1 :(得分:2)

一种方法是迭代PanelTextBox内的每个控件。

foreach (TextBox tb in Panel1.Controls.OfType<TextBox>())
{
    if (tb.Text != "0")
    {
    }
}

答案 2 :(得分:0)

您正试图在Panel1中循环显示this.Controls类型的项目。您要做的是在TextBox中循环使用Panel1.Controls类型的项目。

foreach(Control c in Panel1.Controls) {
    var textbox = Control As TextBox;
    if(textbox != null){
        // do stuff...
    }
}

您还想查看TextBox的Text属性,而不是在其上调用ToString

if(textbox.Text != "0"){ //do stuff... }

并且在循环内多次向同一命令添加@yes参数,而不清除参数列表。我不确定这是否有效,但如果它会导致问题,您应该只能在添加新参数之前调用command.Parameters.Clear清除旧参数。