将查询结果保存为CSV文件

5
我有一个应用程序,它可以打开一个CSV文件并将所有内容显示在格式化的DataGridView中。然后我有一个按钮,它打开另一个包含一系列复选框的表单。这些复选框具有我们之前打开的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在哪里定义?代码似乎不完整。即使选择了wings,您也会写入所有标题,并且我认为文件中的位置不正确。 - Marcote
1个回答

10

如果你的代码不精确,你将无法为以下代码分配一个常量变量:

filter = saveFileDialog1.FileName;

在代码中你之前声明了 "filter" 作为一个常量变量:

const string filter = "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属性“Filter”来定义您要过滤的列表。

好的,太棒了,谢谢!那个错误已经消失了,但是现在当我实际保存时,它只保存为一个“文件”,而不是一个csv文件,有什么想法吗?我以为这应该由字符串过滤器 =“CSV文件(.csv)| .csv |所有文件(。)|。”来处理。 - Ari
这将仅过滤SaveFileDialog中显示的文件。如果有人手动输入文件名,或更改筛选器为*.*并选择非csv文件,则对话框将返回该文件。我建议在继续之前验证从SaveFileDialog返回的内容是否以.csv结尾。 - Joel C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接