循环访问面板控件中的文本框控件

时间:2014-06-19 13:34:18

标签: c# asp.net stream

我试图创建一个带有从文本框中提取的订单详细信息的csv。我有面板控件,其中有12个文本框,我想将每个文本框的文本写入csv中的新行,但没有发生任何事情,文件被创建但没有文本。

这是我的代码:

FileStream file = new FileStream(string.Format(@"Z:\Stream\order{0}.csv", txtName.Text),FileMode.OpenOrCreate);
StreamWriter wr = new StreamWriter(file);
wr.WriteLine(txtName.Text);
wr.WriteLine(txtOrderRef.Text);

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

foreach (TextBox controls in Panel1.Controls)
{
    textboxControls.Add(controls);
}

foreach(TextBox c in textboxControls)
{
    wr.WriteLine(c.Text);
    Label1.Text = c.Text + "<br />";

}

wr.Close();

2 个答案:

答案 0 :(得分:2)

您不需要循环两次,也需要检查控件是否为文本框,尝试使用is构造,如下所示:

FileStream file = new FileStream(string.Format(@"Z:\Stream\order{0}.csv",       txtName.Text),FileMode.OpenOrCreate);
StreamWriter wr = new StreamWriter(file);
wr.WriteLine(txtName.Text);
wr.WriteLine(txtOrderRef.Text);

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

foreach (var control in Panel1.Controls)
{
   if(control is TextBox)
   {
      Textbox tb = control as TextBox;
      wr.WriteLine(tb.Text);
      textboxControls.Add(tb); //not needed in this context, but may be used in code elsewhere
   }
}

答案 1 :(得分:0)

我想象你的问题在于关闭流,你应该使用using

using(StreamWriter wr = new StreamWriter(file))
{
    wr.WriteLine(txtName.Text);
    wr.WriteLine(txtOrderRef.Text);

    foreach (var control in Panel1.Controls.OfType<TextBox>())
    {
        wr.WriteLine(control.Text);
    }
}