C # saveFileDialog открыть дважды - PullRequest
0 голосов
/ 25 мая 2018

У меня есть таблица данных (dt) и кнопка для экспорта данных в Excel.

Я использую ClosedXML, чтобы выполнить работу.

Но когда я нажимаю на экспорткнопку, я получил сначала saveFileDialog, а затем после нажатия кнопки ОК, я получил второй saveFileDialog.После этого файл экспортируется правильно.

Итак, код ...

Это основной код для действия экспорта кнопки.Я использую saveFileDIalog, чтобы позволить пользователю выбрать каталог для сохранения файла.

private void exportarToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if(saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            FileInfo fileInfo = new FileInfo(saveFileDialog.FileName);
            SaveToExcel(dt, fileInfo);
        }
    }

Затем методы

public static void SaveToExcel(System.Data.DataTable dt, FileInfo outputFile)
    {
        XLWorkbook wb = new XLWorkbook();
        var worksheet = wb.Worksheets.Add(dt, "ResultTable");

        using (MemoryStream memoryStream = GetStream(wb))
        {
            File.WriteAllBytes(outputFile.FullName, memoryStream.ToArray());
        }
    }

И MemoryStream

public static MemoryStream GetStream(XLWorkbook excelWorkbook)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            excelWorkbook.SaveAs(stream, new SaveOptions { EvaluateFormulasBeforeSaving = false, GenerateCalculationChain = false, ValidatePackage = false,  });
            return stream;
        }
    }

Можетпожалуйста, кто-нибудь, помогите мне понять, почему я получаю 2 saveFileDialog?

Спасибо.

1 Ответ

0 голосов
/ 25 мая 2018

вижу проблему;Я добавил несколько комментариев:

private void exportarToolStripMenuItem_Click(object sender, EventArgs e)
{
    string filename = saveFileDialog.FileName; // what is this for? I would remove it.
    if(saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        // problem in the following line, explained below
        string path = Path.GetFullPath(filename);
        // you should be picking the saveFileDialog.FileName at this point  to get
        // the user selection, not the filename variable you got before;
        // moreover, the saveFileDialog.FileName is already a full path, no need to
        // call the Path.GetFullPath method
        FileInfo fileInfo = new FileInfo(path);
        SaveToExcel(dt, fileInfo);
    }
}

Редактировать: И другие проблемы сообщаются в комментариях других пользователей (плохое управление MemoryStream)

...