2011-03-31 97 views
3

我有一个应用程序,它打开一个csv文件并将所有内容显示到格式化的datagridview中。从那里我有一个按钮,打开另一个包含一系列复选框的表单。复选框包含我们之前打开的csv文件的所有属性,并且用户应该能够根据他们想要的巫婆属性来查询文件,然后保存该文件。将查询中的数据保存为csv文件

例如,如果他们只想要一个显示动物翅膀的所有条目的文件,则只选择翅膀复选框。从那里,你选择保存按钮,它应该保存文件。

private void button1_Click(object sender, EventArgs e) 
{ 
    SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
    const string filter = "CSV file (*.csv)|*.csv| All Files (*.*)|*.*"; 
    const string header = "Animal_Name,Hair,Feathers,Eggs,Milk,Airborne,Aquatic,Predator,Toothed,Backbone,Breathes,Venomous,Fins,Legs,Tail,Domestic,Catsize,Type"; 
    StreamWriter writer = null; 

    if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
    {   
     filter = saveFileDialog1.FileName; 
     writer = new StreamWriter(filter); 

     writer.WriteLine(header); 
     foreach (Animal animal in animalQuery) 
     { 
      writer.Write(animal); 
     } 
     writer.Close(); 
    } 
} 

这是保存按钮的代码,但在有错误:

filter = saveFileDialog1.FileName; 
writer = new StreamWriter(filter); 

我不知道为什么。

+2

在这种情况下,错误/异常可能非常方便。另外,animalQuery的定义在哪里?代码似乎不完整。此外,即使选择了翅膀,您也正在写所有的标题,并且我不认为文件中的位置正确。 – Marcote 2011-03-31 02:22:47

回答

4

,除非你的代码是准确的,你不能分配到一个常数变量的代码说:

过滤器= saveFileDialog1.FileName;

你申报的 “过滤器” 作为一个常变量进一步上涨:

常量字符串过滤器= “CSV文件(的.csv)|的.csv |所有文件()| ”;

试一下:

 SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
     string filter = "CSV file (*.csv)|*.csv| All Files (*.*)|*.*"; 
     saveFileDialog1.Filter = filter; 
     const string header = "Animal_Name,Hair,Feathers,Eggs,Milk,Airborne,Aquatic,Predator,Toothed,Backbone,Breathes,Venomous,Fins,Legs,Tail,Domestic,Catsize,Type"; 
     StreamWriter writer = null; 

     if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      filter = saveFileDialog1.FileName; 
      writer = new StreamWriter(filter); 

      writer.WriteLine(header); 

      writer.Close(); 
     } 

您使用SavefileDialog属性“过滤器”来定义您的列表中进行筛选。

+0

好的真棒谢谢!那个错误消失了,但现在当我真的去保存时,它只是一个'文件'而不是一个csv文件,任何想法?我认为这已经被string filter =“CSV文件(.csv)| .csv |所有文件(。)|”。 – Ari 2011-03-31 03:13:44

+0

这只会过滤SaveFileDialog中显示的文件。如果某人手动键入文件名,或将过滤器更改为“*。*'并选择非csv文件,则该对话框将返回该文件。我建议在继续之前验证从SaveFileDialog返回的内容以.csv结尾。 – 2011-03-31 03:31:41

+0

请参阅上面的示例。 – 2011-03-31 03:52:35