miniSql

6136600 » zgc123@gmail.com
11/19/2023 创建
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");
        }
    }
}