public void Export(Control owner, BindingListSource bindingListSource) { try { var dataFormats = new[] { DataFormats.CSV, DataFormats.TSV }; string fileFilter = string.Join("|", dataFormats.Select(format => format.FileFilter).ToArray()); // Not L10N using (var saveFileDialog = new SaveFileDialog { Filter = fileFilter, InitialDirectory = GetExportDirectory(), FileName = GetDefaultExportFilename(bindingListSource.ViewInfo), }) { if (saveFileDialog.ShowDialog(FormUtil.FindTopLevelOwner(owner)) == DialogResult.Cancel) { return; } var dataFormat = dataFormats[saveFileDialog.FilterIndex - 1]; SafeWriteToFile(owner, saveFileDialog.FileName, stream => { var writer = new StreamWriter(stream, new UTF8Encoding(false)); var cloneableRowSource = bindingListSource.RowSource as ICloneableList; bool finished = false; if (null == cloneableRowSource) { var progressMonitor = new UncancellableProgressMonitor(); WriteData(progressMonitor, writer, bindingListSource, dataFormat.GetDsvWriter()); finished = true; } else { var clonedList = cloneableRowSource.DeepClone(); RunLongJob(owner, progressMonitor => { using (var clonedBindingList = new BindingListSource()) { SetViewFrom(bindingListSource, clonedList, clonedBindingList); WriteData(progressMonitor, writer, clonedBindingList, dataFormat.GetDsvWriter()); finished = !progressMonitor.IsCanceled; } }); } if (finished) { writer.Flush(); } return(finished); }); SetExportDirectory(Path.GetDirectoryName(saveFileDialog.FileName)); } } catch (Exception exception) { ShowMessageBox(owner, Resources.AbstractViewContext_Export_There_was_an_error_writing_to_the_file__ + exception.Message, MessageBoxButtons.OK); } }
public void CopyAll(Control owner, BindingListSource bindingListSource) { try { StringWriter tsvWriter = new StringWriter(); var cloneableRowSource = bindingListSource.RowSource as ICloneableList; if (null == cloneableRowSource) { var progressMonitor = new UncancellableProgressMonitor(); WriteData(progressMonitor, tsvWriter, bindingListSource, DataFormats.TSV.GetDsvWriter()); } else { var clonedList = cloneableRowSource.DeepClone(); if (!RunLongJob(owner, progressMonitor => { using (var clonedBindingList = new BindingListSource()) { SetViewFrom(bindingListSource, clonedList, clonedBindingList); WriteData(progressMonitor, tsvWriter, clonedBindingList, DataFormats.TSV.GetDsvWriter()); progressMonitor.UpdateProgress(new ProgressStatus(string.Empty).Complete()); } })) { return; } } DataObject dataObject = new DataObject(); dataObject.SetText(tsvWriter.ToString()); Clipboard.SetDataObject(dataObject); } catch (Exception exception) { ShowMessageBox(owner, Resources.AbstractViewContext_CopyAll_There_was_an_error_copying_the_data_to_the_clipboard__ + exception.Message, MessageBoxButtons.OK); } }