我有一个包含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的截图。 谢谢。
答案 0 :(得分:4)
简单的答案是
foreach(Control control in this.Controls) {
if (control is TextBox) {
// The code here ...
}
}
问题是你需要确保文本框循环的顺序是正确的,这增加了更多的维护工作,这是完全没必要的。更好的方法是学习数据绑定。或者更简单地说,只需命名文本框并直接指定它们即可。我认为这两种方法都比使用循环更好。
答案 1 :(得分:2)
一种方法是迭代Panel
中TextBox
内的每个控件。
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
清除旧参数。