我试图创建一个带有从文本框中提取的订单详细信息的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();
答案 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);
}
}