从控件创建csv文件

时间:2014-05-08 01:08:31

标签: c# wpf csv

我有一个WPF应用程序,带有问题和答案的表单。问题在文本块中,并在组合框中回答。用户为每个问题选择答案。我需要创建一个带有问题和答案的csv文件。 我打算遍历每个控件并获取问题和答案的值,并创建csv文件,如下所示:

for()
{
 String csv = String.Join(Environment.NewLine, txtQuestion.Text +";" + cbAnswer.Text); 
}
System.IO.File.WriteAllText(@"C:\Test\Samplec.csv", csv);

这是一个很好的方法吗?

1 个答案:

答案 0 :(得分:1)

总之,这不是一个好方法。对于糟糕的设计/实现,直接访问UI在WPF中是一个很大的危险信号。

您应该有一个项控件绑定到某个包含问题和答案字符串的对象的ObservableCollection。然后你只需迭代集合:

public class QuestionAnswerPair
{
    public String Question { get; set; }
    public String Answer { get; set; }
}

.....

ObservableCollection<QuestionAnswerPair> Questions { get; set; }

.....  

String csv = String.Join(Questions.Select(qAndA => String.Format("{0};{1}\n", qAndA.Question , qAndA.Answer)).ToArray(), ','); 
System.IO.File.WriteAllText(@"C:\Test\Samplec.csv", csv);

XAML片段:

<ItemsControl ItemsSource="{Binding Questions}">
   <ItemsControl.ItemTemplate>
      <DataTemplate>
         <StackPanel Orientation="Horizontal"/>
            <TextBox Text="{Binding Question}"/>
            <TextBox Text="{Binding Answer}"/>
         </StackPanel>
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

这会生成一种奇怪的csv文件,但它与您的代码非常匹配。我相信你可以弄清楚解析,但随便问你是否有问题。