Есть три таких метода (на самом деле их может быть еще больше.)
private void bExportExcel_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
{
TableView viewToWorkWith = GetViewToExportOrPrint();
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = ".xls"; // Default file extension
dlg.Filter = ".xls|*.xls"; // Filter files by extension
Nullable<bool> result = dlg.ShowDialog();
// Process save file dialog box resultsif (result == true)
{
// Save documentstring filename = dlg.FileName;
viewToWorkWith.ExportToXls(filename, new DevExpress.XtraPrinting.XlsExportOptions());
}
}
private void bExportHtml_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
{
TableView viewToWorkWith = GetViewToExportOrPrint();
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = ".html"; // Default file extension
dlg.Filter = ".html|*.html"; // Filter files by extension
Nullable<bool> result = dlg.ShowDialog();
// Process save file dialog box resultsif (result == true)
{
// Save documentstring filename = dlg.FileName;
viewToWorkWith.ExportToHtml(filename, new DevExpress.XtraPrinting.HtmlExportOptions());
}
}
private void bExportPdf_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
{
TableView viewToWorkWith = GetViewToExportOrPrint();
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = ".pdf"; // Default file extension
dlg.Filter = ".pdf|*.pdf"; // Filter files by extension
Nullable<bool> result = dlg.ShowDialog();
// Process save file dialog box resultsif (result == true)
{
// Save documentstring filename = dlg.FileName;
viewToWorkWith.ExportToPdf(filename, new DevExpress.XtraPrinting.PdfExportOptions());
}
Как-то можно их отрефакторить, чтобы был один базовый метод, который бы и вызывался три раза с разными параметрами?
Сложность тут в том, что методы типа viewToWorkWith.ExportToPdf(filename, new DevExpress.XtraPrinting.PdfExportOptions()); отличаются сигнатурой и filename становится известным слишком поздно .
Здравствуйте, AlexDP, Вы писали:
ADP>Есть три таких метода (на самом деле их может быть еще больше.)
ADP>Как-то можно их отрефакторить, чтобы был один базовый метод, который бы и вызывался три раза с разными параметрами?
ADP>Сложность тут в том, что методы типа viewToWorkWith.ExportToPdf(filename, new DevExpress.XtraPrinting.PdfExportOptions()); отличаются сигнатурой и filename становится известным слишком поздно .
В студии не тестил, но как-то так?
ADP>
ADP>private void HandleEvent<T>(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e, Action<string,T> callback, T callbackOptions)
ADP>{
ADP> TableView viewToWorkWith = GetViewToExportOrPrint();
ADP> Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
ADP> dlg.FileName = "Document"; // Default file name
ADP> dlg.DefaultExt = ".xls"; // Default file extension
ADP> dlg.Filter = ".xls|*.xls"; // Filter files by extension
ADP> Nullable<bool> result = dlg.ShowDialog();
ADP> // Process save file dialog box results
ADP> if (result == true)
ADP> {
ADP> // Save document
ADP> string filename = dlg.FileName;
ADP> callback(filename, callbackOptions);
ADP> }
ADP>}
ADP>private void bExportExcel_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
ADP>{
ADP> HandleEvent(sender, e, viewToWorkWith.ExportToXls, new DevExpress.XtraPrinting.XlsExportOptions());
ADP>}
ADP>
Здравствуйте, Nuseraro, Вы писали:
N>Здравствуйте, AlexDP, Вы писали:
ADP>>Есть три таких метода (на самом деле их может быть еще больше.)
ADP>>Как-то можно их отрефакторить, чтобы был один базовый метод, который бы и вызывался три раза с разными параметрами?
ADP>>Сложность тут в том, что методы типа viewToWorkWith.ExportToPdf(filename, new DevExpress.XtraPrinting.PdfExportOptions()); отличаются сигнатурой и filename становится известным слишком поздно .
N>В студии не тестил, но как-то так?
ADP>>
ADP>>private void HandleEvent<T>(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e, Action<string,T> callback, T callbackOptions)
ADP>>{
ADP>> TableView viewToWorkWith = GetViewToExportOrPrint();
ADP>> Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
ADP>> dlg.FileName = "Document"; // Default file name
ADP>> dlg.DefaultExt = ".xls"; // Default file extension
ADP>> dlg.Filter = ".xls|*.xls"; // Filter files by extension
ADP>> Nullable<bool> result = dlg.ShowDialog();
ADP>> // Process save file dialog box results
ADP>> if (result == true)
ADP>> {
ADP>> // Save document
ADP>> string filename = dlg.FileName;
ADP>> callback(filename, callbackOptions);
ADP>> }
ADP>>}
ADP>>private void bExportExcel_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
ADP>>{
ADP>> HandleEvent(sender, e, viewToWorkWith.ExportToXls, new DevExpress.XtraPrinting.XlsExportOptions());
ADP>>}
ADP>>
Красиво, но viewToWorkWith должен определяться внутри HandleEvent
А что если будет viewToWorkWith.ExportToXls(filename); т.е. без дополнительных параметров.
Сорри, я об этом сразу не написал, а львиная доля использований именно такая будет.
Можно конечно скопипастить еще один такой же похожий метод...
ADP>Спасибо, это почти оно.
ADP>А что если будет viewToWorkWith.ExportToXls(filename); т.е. без дополнительных параметров?
ADP>Сорри, я об этом сразу не написал, а львиная доля использований именно такая будет.
Сорри, туплю что-то сегодня
Это именно то, что я ожидал.
Я уж думал, что такую конструкцию не написать на шарпе .
Здравствуйте, AlexDP, Вы писали:
ADP>А что если будет viewToWorkWith.ExportToXls(filename); т.е. без дополнительных параметров?
ADP>Сорри, я об этом сразу не написал, а львиная доля использований именно такая будет.
Если действительно часто используется, то я-бы, вероятно, сделал-бы вроде такого(эскиз на коленке)
public static class ExportManager
{
private struct RegEntry
{
public MethodInfo Method;
public object Options;
}
private static Dictionary<string, RegEntry> RegEntries
= new Dictionary<string, RegEntry>();
public static void RegisterFormat(string Extension, string Method, object Options)
{
var entry = new RegEntry();
entry.Method = typeof(TableView).GetMethod(Method, new Type[]{typeof(string), Options.GetType()});
entry.Options = Options;
RegEntries.Add(Extension, entry);
}
public static void Export(string FileName)
{
TableView viewToWorkWith = GetViewToExportOrPrint();
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = Path.GetExtension(FileName);
dlg.Filter = string.Format("{0}|*.{0}", DefaultExt);
if (!dlg.ShowDialog()) return;
var entry = RegEntries[DefaultExt];
entry.Method.Invoke(viewToWorkWith, new object[] {dlg.FileName, entry.Options });
}
}