从动态生成的文本框中获取值到XML

时间:2014-08-19 07:57:58

标签: c# xml

我动态添加了89个文本框。我想将文本框的值赋予xml。我可以添加文本框就好了问题是我无法动态获取这些值 添加了文本框。

例如,我想从textBox1获取值到节点" F1"在XML中,从textBox2到节点" F2"在XML中。

private void button1_Click(object sender, EventArgs e)
{  
    XmlNodeList xnList;
    XmlDocument doc = new XmlDocument();
    string dosyayolu = Application.StartupPath + "\\coupling.xml";
    doc.Load(dosyayolu);

    if (globaller.hangimenu == "TWT1")
    {
        xnList = doc.SelectNodes("/coup/TWT1");
    }
    else
    {
        xnList = doc.SelectNodes("/coup/TWT2");
    }

    for (int i = 0; i < 89; i++)
    {
        foreach (XmlNode xn in xnList)
        {
            xn["F" + (i + 1).ToString()].InnerText = "k";
            // xn["F1"].InnerText = textBox1.Text;
        }
    }

    doc.Save(dosyayolu);
}

3 个答案:

答案 0 :(得分:1)

我猜你的文本框是名称textBox1,textBox2,....你的xml节点也是从F1开始而不是F2所以我改变了For循环

for (int i = 1; i < 90; i++)
  {
      foreach (XmlNode xn in xnList)
      {
          // this if textboxes on form, yourUserControlName if it is under a usercontrol
          var tb = (TextBox)this.Controls["textBox" + i];
          xn["F" + i].InnerText = tb.Text;

      }
  }

编辑赞成Hassan Nisar的评论

答案 1 :(得分:1)

您可以使用扩展程序ChildrenOfType<T>()。 假设grid是所有TextBox的父级..

var textBoxes= grid.ChildrenOfType<TextBox>().ToArray();
for (int i = 0; i < 89; i++)
{
    foreach (XmlNode xn in xnList)
    {
        xn["F" + (i + 1).ToString()].InnerText = "k";
        xn["F1"].InnerText = textBoxes[ i ].Text;
    }
}

答案 2 :(得分:0)

你可以这样做:

//create
StackPanel sp = new StackPanel();
for(int i=0;i<89;i++)
{
    TextBox tb = new TextBox();
    sp.Children.Add(tb);
}

//get
foreach(TextBox tb in sp.Children)
{

}

或者您可以将所有文本框添加到列表中,并按索引从列表中获取