Ejemplo n.º 1
0
 /// <summary>
 /// BackgroundWorker method used to create a datatable including data queried from Databasein in all the fields selected.
 /// </summary>
 /// <param name="parameters"> BackgroundWorker parameters passed from Export Button Click Event</param>
 /// <param name="exportdlgWorker"> BackgroundWorker (may be null), in order to show progress</param>
 /// <param name="e">Arguments from a BackgroundWorker (may be null), in order to support canceling</param>
 /// <returns>Return the BackgroundWorker result.</returns>
 private string Exportdlg(BwParameters parameters, BackgroundWorker exportdlgWorker, DoWorkEventArgs e)
 {
     if (ExportThemes)
     {
         return(ExportDataSeriesTable(parameters, exportdlgWorker, e));
     }
     return(ExportAnyDataTable(parameters, exportdlgWorker, e));
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Export data using BackgroundWorker. Build series table and pass parameters from here to BackgroundWorker.
        /// </summary>
        private void btnExport_Click(object sender, EventArgs e)
        {
            // Make sure we aren't still working on a previous task
            if (bgwMain.IsBusy)
            {
                MessageBox.Show("The background worker is busy now. Please try later.", "Export To Text File",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //Check the themes  for export.  There should be at least one item selected.
            if (ExportThemes && clbThemes.CheckedItems.Count == 0)
            {
                MessageBox.Show("Please choose at least one theme to export", "Export To Text File",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //Check the desired fields for export.  There should be at least one item selected.
            if (clbExportItems.CheckedItems.Count == 0)
            {
                MessageBox.Show("Please choose at least one field to export", "Export To Text File",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //Check whether a delimiter is checked
            var delimiter = delimiterSelector1.CurrentDelimiter;

            if (String.IsNullOrEmpty(delimiter))
            {
                MessageBox.Show("Please input delimiter.", "Export To Text File");
                return;
            }

            //Check the output file path
            string outputFilename = tbOutPutFileName.Text.Trim();

            if (outputFilename == String.Empty)
            {
                MessageBox.Show("Please specify output filename", "Export To Text File");
                return;
            }
            if (Directory.Exists(Path.GetDirectoryName(outputFilename)) == false)
            {
                MessageBox.Show("The directory for the output filename does not exist", "Export To Text File");
                return;
            }

            // Construct DataTable of all the series in the selected theme
            DataTable dtSeries;

            if (ExportThemes)
            {
                var themeIds =
                    (from ThemeDescription themeDescr in clbThemes.CheckedItems select themeDescr.ThemeId).ToList();
                var repository = RepositoryFactory.Instance.Get <IDataSeriesRepository>();
                dtSeries = repository.GetSeriesIDsWithNoDataValueTable(themeIds);
            }
            else
            {
                dtSeries = _dataToExport;
            }

            var checkedItems = new List <string>();

            foreach (var item in clbExportItems.CheckedItems.Cast <string>().Where(item => !checkedItems.Contains(item)))
            {
                checkedItems.Add(item);
            }

            DatesRange datesRange = null;

            if (chbUseDateRange.Checked && cmbDateTimeColumns.SelectedIndex >= 0)
            {
                datesRange = new DatesRange
                {
                    ColumnName = cmbDateTimeColumns.SelectedItem.ToString(),
                    StartDate  = dtpStartDateRange.Value,
                    EndDate    = dtpEndDateRange.Value,
                };
            }


            //Disable all the buttons after "Export" button is clicked.
            UpdateControlsState(true);

            // Show hourglass
            Cursor = Cursors.WaitCursor;

            //pass parameters to BackgroundWorker
            var parameters = new BwParameters
            {
                CheckNoData    = chkNodata.Checked,
                Columns        = checkedItems,
                DatesRange     = datesRange,
                Delimiter      = delimiter,
                OutputFileName = outputFilename,
                Series         = dtSeries,
            };

            // Check for overwrite
            if (File.Exists(outputFilename))
            {
                var message = "File " + outputFilename + " already exists.\nWould you like to replace it?";
                var replace = MessageBox.Show(message, "Export To Text File", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (replace == DialogResult.No)
                {
                    Cursor = Cursors.Default;

                    // Restore controls to their regular state
                    UpdateControlsState(false);
                    return;
                }

                File.Delete(outputFilename);

                bgwMain.RunWorkerAsync(parameters);
            }

            else
            {
                bgwMain.RunWorkerAsync(parameters);
            }
        }
Ejemplo n.º 3
0
        private string ExportAnyDataTable(BwParameters parameters, BackgroundWorker backgroundWorker, DoWorkEventArgs e)
        {
            var filename          = parameters.OutputFileName;
            var checkedItems      = parameters.Columns;
            var delimiter         = parameters.Delimiter;
            var originalDataTable = parameters.Series;

            //Report status
            backgroundWorker.ReportProgress(0, "Preparing output...");

            DataTable exportDataTable;

            if (checkedItems.Count == originalDataTable.Rows.Count)
            {
                exportDataTable = originalDataTable;
            }
            else
            {
                //Build a new datatable to accept selected columns in the original datatable and used to export.
                exportDataTable = originalDataTable.Copy(); // copy

                //Check for cancel
                if (backgroundWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return("Data Export Cancelled.");
                }

                //Report status
                backgroundWorker.ReportProgress(0, "Checking columns...");

                //Remove unwanted columns
                foreach (DataColumn column in originalDataTable.Columns)
                {
                    //Check for cancel
                    if (backgroundWorker.CancellationPending)
                    {
                        e.Cancel = true;
                        return("Data Export Cancelled.");
                    }

                    var columnName = column.ColumnName;
                    if (!checkedItems.Contains(columnName))
                    {
                        exportDataTable.Columns.Remove(columnName);
                    }

                    exportDataTable.AcceptChanges();
                }
            }

            // Check for cancel
            if (backgroundWorker.CancellationPending)
            {
                e.Cancel = true;
                return("Data Export Cancelled.");
            }

            ImportExport.DelimitedTextWriter.DataTableToDelimitedFile(exportDataTable, filename, delimiter,
                                                                      true, false, backgroundWorker, e,
                                                                      ImportExport.BackgroundWorkerReportingOptions.UserStateAndProgress);

            if (backgroundWorker.CancellationPending)
            {
                e.Cancel = true;
                return("Data Export Cancelled.");
            }
            return("Export complete.  Rows exported: " + exportDataTable.Rows.Count.ToString(CultureInfo.InvariantCulture));
        }
Ejemplo n.º 4
0
        private string ExportDataSeriesTable(BwParameters parameters, BackgroundWorker backgroundWorker, DoWorkEventArgs e)
        {
            //get parameters
            var fileName     = parameters.OutputFileName;
            var dtSeries     = parameters.Series;
            var checkNodata  = parameters.CheckNoData;
            var delimiter    = parameters.Delimiter;
            var checkedItems = parameters.Columns;
            var datesRange   = parameters.DatesRange;

            var repo = RepositoryFactory.Instance.Get <IDataValuesRepository>();

            //export data row by row
            for (int r = 0; r < dtSeries.Rows.Count; r++)
            {
                var row = dtSeries.Rows[r];

                //Check for cancel
                if (backgroundWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return("Data Export Cancelled.");
                }

                var noDataValue = !checkNodata?Convert.ToDouble(row["NoDataValue"]) : (double?)null;

                // Date range filter
                string   dateColumn = null;
                DateTime?firstDate  = null;
                DateTime?lastDate   = null;
                if (datesRange != null)
                {
                    dateColumn = datesRange.ColumnName;
                    firstDate  = datesRange.StartDate;
                    lastDate   = datesRange.EndDate;
                }
                var tbl = repo.GetTableForExport(Convert.ToInt64(row["SeriesID"]), noDataValue, dateColumn, firstDate,
                                                 lastDate);

                //Check for cancel
                if (backgroundWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return("Data Export Cancelled.");
                }

                //Construct columns that were selected
                for (int i = 0; i < tbl.Columns.Count; i++)
                {
                    var column = tbl.Columns[i];
                    if (!checkedItems.Contains(column.ColumnName))
                    {
                        tbl.Columns.Remove(column);
                        i--;
                    }

                    //Check for cancel
                    if (backgroundWorker.CancellationPending)
                    {
                        e.Cancel = true;
                        return("Data Export Cancelled.");
                    }
                }

                //Check for cancel
                if (backgroundWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return("Data Export Cancelled.");
                }

                var includeHeaders = r == 0;
                ImportExport.DelimitedTextWriter.DataTableToDelimitedFile(tbl, fileName, delimiter,
                                                                          includeHeaders, true,
                                                                          backgroundWorker, e,
                                                                          ImportExport.BackgroundWorkerReportingOptions.UserStateAndProgress);

                //progress report
                var percent   = (int)(((float)r / dtSeries.Rows.Count) * 100);
                var userState = "Writing series " + r + " of " + dtSeries.Rows.Count + "...";
                backgroundWorker.ReportProgress(percent, userState);
            }

            //Check for cancel
            if (backgroundWorker.CancellationPending)
            {
                e.Cancel = true;
                return("Data Export Cancelled.");
            }

            return(dtSeries.Rows.Count.ToString(CultureInfo.InvariantCulture) + " data series downloaded to: " + fileName);
        }