diff --git a/minisqlquery-master/src/Contrib/MiniSqlQuery.Exports.Plugin/ExportWindow.cs b/minisqlquery-master/src/Contrib/MiniSqlQuery.Exports.Plugin/ExportWindow.cs
new file mode 100644
index 0000000..d75de71
--- /dev/null
+++ b/minisqlquery-master/src/Contrib/MiniSqlQuery.Exports.Plugin/ExportWindow.cs
@@ -0,0 +1,275 @@
+using System;
+using System.Data;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Forms;
+
+namespace MiniSqlQuery.Exports.Plugin
+{
+ public partial class ExportWindow : Form
+ {
+ private readonly IApplicationServices _services;
+ private DataSet _dsExecutedData;
+
+ public ExportWindow(IApplicationServices services)
+ {
+ _services = services;
+ InitializeComponent();
+ txtFilePath.Text = string.Format("{0}\\export{1:yyyy-MM-dd}.htm",
+ Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), DateTime.Today);
+ }
+
+ public string SetStatusText
+ {
+ set
+ {
+ toolStripStatusLabel1.Text = value;
+ statusStrip1.Refresh();
+ }
+ }
+
+ private void ExportWindow_Load(object sender, EventArgs e)
+ {
+ IQueryBatchProvider batchProvider = _services.HostWindow.ActiveChildForm as IQueryBatchProvider;
+
+ if (batchProvider != null && batchProvider.Batch != null)
+ {
+ if (batchProvider.Batch.Queries.Count > 1)
+ {
+ BatchQuerySelectForm querySelectForm = new BatchQuerySelectForm();
+ querySelectForm.Fill(batchProvider.Batch);
+ querySelectForm.ShowDialog();
+ if (querySelectForm.DialogResult == DialogResult.OK)
+ {
+ _dsExecutedData = querySelectForm.SelectedQuery.Result;
+ }
+ else
+ {
+ Close(); // user calncelled
+ }
+ return;
+ }
+
+ if (batchProvider.Batch.Queries.Count == 1)
+ {
+ _dsExecutedData = batchProvider.Batch.Queries[0].Result;
+ return;
+ }
+ }
+
+ MessageBox.Show("Couldn't find a result window, run a query or view a table to export the data.");
+ Close();
+ }
+
+ private void btnExport_Click(object sender, EventArgs e)
+ {
+ if (rbtXml.Checked)
+ {
+ ExportXml();
+ }
+
+ if (rbtHtml.Checked)
+ {
+ ExportHtml();
+ }
+
+ if (rbtCsv.Checked)
+ {
+ ExportCSV();
+ }
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ // Create new SaveFileDialog object
+ SaveFileDialog dialogSave = new SaveFileDialog();
+
+ // Default file extension
+ if (rbtCsv.Checked)
+ {
+ dialogSave.DefaultExt = "csv";
+ dialogSave.FilterIndex = 2;
+ }
+
+ if (rbtHtml.Checked)
+ {
+ dialogSave.DefaultExt = "htm";
+ dialogSave.FilterIndex = 1;
+ }
+
+ if (rbtXml.Checked)
+ {
+ dialogSave.DefaultExt = "xml";
+ dialogSave.FilterIndex = 3;
+ }
+
+ //DialogSave.DefaultExt = "txt";
+
+ // Available file extensions
+ dialogSave.Filter = "Html File (*.htm)|*.htm|CSV File (*.csv)|*.csv|XML file (*.xml)|*.xml";
+
+ // Adds a extension if the user does not
+ dialogSave.AddExtension = true;
+
+ // Restores the selected directory, next time
+ dialogSave.RestoreDirectory = true;
+
+ // Dialog title
+ dialogSave.Title = "Where do you want to save the file?";
+
+ // Startup directory
+ dialogSave.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
+
+ // Show the dialog and process the result
+ if (dialogSave.ShowDialog() == DialogResult.OK)
+ {
+ txtFilePath.Text = dialogSave.FileName;
+ //MessageBox.Show("You selected the file: " + DialogSave.FileName);
+ }
+
+ dialogSave.Dispose();
+ }
+
+ //private int GetFieldCount
+ //{
+ // get { return _dsExecutedData.Tables[0].Columns.Count; }
+ //}
+ //private int GetRowCount
+ //{
+ // get { return _dsExecutedData.Tables[0].Rows.Count; }
+ //}
+
+ private void ExportHtml()
+ {
+ Export.HtmlExportFormat format = new Export.HtmlExportFormat();
+ format.FontColor = txtFontColor.Text;
+ format.FontFamily = txtFontFamily.Text;
+ format.FontSize = txtFontSize.Text;
+
+ format.HeaderColor = txtHeaderBGColor.Text;
+ format.RowAltColor = txtRowBgAltColor.Text;
+ format.RowColor = txtRowBgcolor.Text;
+
+ Export.HtmlExport.OnWrittenData += CSVExport_OnWrittenData;
+ Export.HtmlExport.ExportToHTML(_dsExecutedData.Tables[0], txtFilePath.Text, format);
+
+ #region Not used
+
+ //StringBuilder sbCss = new StringBuilder();
+ //StringBuilder sbHtml = new StringBuilder();
+ //bool isAltSet = false;
+
+ //sbCss.Append("<style>");
+ //sbCss.Append("body { font-family:" + this.txtFontFamily.Text + "; font-size:" + this.txtFontSize.Text + "; color:" + this.txtFontColor.Text + "; }");
+ //sbCss.Append(".Header {background-color:" + this.txtHeaderBGColor.Text + "}");
+ //sbCss.Append(".Row {background-color:" + this.txtRowBgcolor.Text + "}");
+ //sbCss.Append(".AltRow {background-color:" + this.txtRowBgAltColor.Text + "}");
+ //sbCss.Append("</style>");
+
+ //this.SetStatusText = "Created style for html";
+
+ //sbHtml.Append("<html>");
+ //sbHtml.Append("<head><title>Export from " + _dsExecutedData.Tables[0].TableName + "</title>");
+ //sbHtml.Append(sbCss.ToString());
+ //sbHtml.Append("</head>");
+ //sbHtml.Append("<body>");
+
+ //int fields = this.GetFieldCount;
+ //sbHtml.Append("<table border='0' cellpadding='2'");
+ //sbHtml.Append("<tr>");
+ //for (int i = 0; i < fields; i++)
+ //{
+ // sbHtml.Append(string.Format("<td class='Header'>{0}</td>", _dsExecutedData.Tables[0].Columns[i].ColumnName));
+ // this.SetStatusText = "Writing column name " + i.ToString();
+ //}
+ //sbHtml.Append("</tr>");
+
+ //int Counter = 0;
+ //foreach (DataRow dr in _dsExecutedData.Tables[0].Rows)
+ //{
+ // sbHtml.Append("<tr>");
+
+ // for (int i = 0; i < fields; i++)
+ // {
+ // if (isAltSet)
+ // {
+ // sbHtml.Append(string.Format("<td class='AltRow'>{0}</td>", dr[i].ToString()));
+
+ // }
+ // else
+ // {
+ // sbHtml.Append(string.Format("<td class='Row'>{0}</td>", dr[i].ToString()));
+
+ // }
+ // }
+ // Counter++;
+ // this.SetStatusText = "Wring row " + Counter.ToString();
+ // sbHtml.Append("</tr>");
+
+ // if (isAltSet == false)
+ // isAltSet = true;
+ // else
+ // isAltSet = false;
+ //}
+ //sbHtml.Append("</table>");
+ //sbHtml.Append("</body></html>");
+
+
+ //System.IO.TextWriter tw = new System.IO.StreamWriter(this.txtFilePath.Text);
+ //tw.WriteLine(sbHtml.ToString());
+ //tw.Close();
+ //this.SetStatusText = "Finished exporting to html file";
+
+ #endregion
+ }
+
+ private void ExportCSV()
+ {
+ Export.CSVExport.OnWrittenData += CSVExport_OnWrittenData;
+ Export.CSVExport.ExportToCSV(_dsExecutedData.Tables[0], txtFilePath.Text, chkRowNames.Checked);
+ }
+
+ private void CSVExport_OnWrittenData(string text)
+ {
+ SetStatusText = text;
+ }
+
+ private void ExportXml()
+ {
+ _dsExecutedData.Tables[0].WriteXml(txtFilePath.Text);
+ SetStatusText = "Finished exporting to Xml file";
+ }
+
+ private void btnCancel_Click(object sender, EventArgs e)
+ {
+ Close();
+ }
+
+ private void rbtHtml_CheckedChanged(object sender, EventArgs e)
+ {
+ ChangeExtension("htm");
+ }
+
+ private void ChangeExtension(string extension)
+ {
+ if (!string.IsNullOrEmpty(txtFilePath.Text))
+ {
+ string p = txtFilePath.Text;
+ int idx = p.LastIndexOf(".");
+ p = p.Remove(idx);
+ p = p + "." + extension;
+ txtFilePath.Text = p;
+ }
+ }
+
+ private void rbtCsv_CheckedChanged(object sender, EventArgs e)
+ {
+ ChangeExtension("csv");
+ }
+
+ private void rbtXml_CheckedChanged(object sender, EventArgs e)
+ {
+ ChangeExtension("xml");
+ }
+ }
+}
\ No newline at end of file