我动态添加了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);
}
答案 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)
{
}
或者您可以将所有文本框添加到列表中,并按索引从列表中获取