0

我有 10 个文本框 txt_Address1、txt_Address2...txt_Address10 和 10 列将它们的值存储在数据库中,即 Address1、Address2...Address10。现在我想获取文本框的每个值并将其存储到相应的列中。为此,我不想为每个文本框编写 10 行代码,而是想通过 FOR 循环来完成。有人可以建议我合适的解决方案吗?

4

8 回答 8

1

创建文本框时,将它们存储在集合中

List<TextBox> textboxControls = new List<TextBox>();

然后当您创建它们时,将它们添加到集合中

textboxControls.Add(control);

然后你可以遍历它们并访问它们的值

foreach(var control in textboxControls )
    DoSomethingWithText(control.Text);
于 2013-11-11T06:33:51.457 回答
0

或者您可以从没有列表的表单中访问它们:

foreach(Control control in MyForm.Controls)
{
    if(control is TextBox)
    {
       //do what you want

    }
}

或者,如果您将它们放在 groupBox 中

foreach(Control control in myGroupBox.Controls)
{
     if(control is TextBox)
     {
         //do what you want
     }
}

希望这可以帮助!

或者使用 FOR 循环:

//Controls is the Controls collection of the form
for(int i=0;i<Controls.Count;i++)
        {
            if(Controls[i] is TextBox)
            {
                //do what you want
            }
        }
于 2013-11-11T06:39:48.407 回答
0

在您花费(浪费)时间为这样设计的数据库编写代码之前,您应该重新设计您的数据库。在一个表中为 10 个地址设置 10 列并不是一个好主意。您应该能够拥有从 0 到无穷大的地址。查找如何制作关系数据库。

基本上:

表:客户

CustomerID
Name
Etc.

表:客户地址

CustomerID
Address
City
State
Zip
于 2013-11-11T06:41:40.663 回答
0

只需在 TextBox 数组中引用文本框;

TextBox txt1 = new TextBox();
TextBox txt2 = new TextBox();
TextBox txt3 = new TextBox();
TextBox txtN = new TextBox();

TextBox[] allTextBoxes = new TextBox[] { txt1, txt2, txt3, txtN };

foreach(TextBox item in allTextBoxes)
{
StoreValue(item.Text);
}

或者你可以使用

List<TextBox> lst = new List<TextBox>();
lst.Add(txt1);
lst.Add(txt2);
lst.Add(txt3);

foreach(TextBox item in lst)
{
    StoreValue(item.Text);
}
于 2013-11-11T06:33:09.313 回答
0

您可以将它们放在一个列表中,然后遍历该列表...

编辑:似乎 lostincomputer 比我早 20 秒回答...同样...两者都可以

于 2013-11-11T06:33:38.773 回答
0

步骤1: 您可以通过所有Form控件并且只考虑 TextBox控件。

第 2 步:从所有表单TextBox控件中过滤包含Nametxt_Address%”的文本框,此处%可以是 1、2、3、4 等任何内容,

代码如下:

        List<String> txtValues=new List<string>();
        foreach (var control in this.Controls)
        {
         if((control is TextBox) && (((TextBox) control).Name.Contains("txt_Address")))
             txtValues.Add(((TextBox) control).Text.ToString());
        }
于 2013-11-11T06:45:17.260 回答
0

您可以像这样使用 Controls.Find() :

        for (int i = 1; i <= 10; i++)
        {
            Control[] matches = this.Controls.Find("txt_Address" + i.ToString(), true);
            if (matches.Length > 0 && matches[0] is TextBox)
            {
                TextBox tb = (TextBox)matches[0];
                // ... do something with "tb" ...
            }
        }
于 2013-11-11T06:45:18.433 回答
0
var columns = new Dictionary<string, string>();
for (int i = 1; i <= 10; i++) columns.Add("Address" + i, string.Empty);

var textBoxes = Controls.Find("txt_Address", true).Where(t => t is TextBox).ToList();

columns.ToList().ForEach(c =>
{
    var index = c.Key.Replace("Address", string.Empty);
    var textBox = textBoxes.FirstOrDefault(t => index.Equals(t.Name.Replace("txt_Address", string.Empty)));
    if (textBox != null) columns[c.Key] = textBox.Text;
});
于 2013-11-11T07:38:37.213 回答