Esempio n. 1
0
        private async void ExportToExcel(string filePath)
        {
            try
            {
                #region Load data
                List <WorkViewModel> md = new List <WorkViewModel>();
                //totalPage = 1;
                //int PageIndex = 0;
                GetWorkPagingRequest re = new GetWorkPagingRequest();
                re.SOCIETY   = "VCPMC";
                re.PageSize  = Core.LimitRequestWork;
                re.PageIndex = 1;
                var ms = await controller.TotalGetAllPaging(re);

                if (ms.TotalRecordes == 0)
                {
                    statusMain.Invoke(new MethodInvoker(delegate
                    {
                        lbOperation.Text = "data empty, not data VCPMC for export";
                    }));
                    return;
                }
                else
                {
                    //if (ms.TotalRecordes % request.PageSize == 0)
                    //{
                    //    totalPage = ms.TotalRecordes / re.PageSize;
                    //}
                    //else
                    //{
                    //    totalPage = ms.TotalRecordes / re.PageSize + 1;
                    //}
                }
                statusMain.Invoke(new MethodInvoker(delegate
                {
                    progressBarImport.Value = 0;
                    lbPercent.Text          = "0%";
                }));
                statusMain.Invoke(new MethodInvoker(delegate
                {
                    lbOperation.Text = "Wating load data from server...";
                }));
                int serial = 0;
                //for (int i = 0; i < totalPage; i++)
                //{
                //    serial++;
                //    re.PageIndex = serial;
                //    var data = await controller.GetAllPaging(re);
                //    if (data == null || data.ResultObj == null || data.ResultObj.Items == null || data.ResultObj.Items.Count == 0 || filepath == string.Empty)
                //    {
                //        statusMain.Invoke(new MethodInvoker(delegate
                //        {
                //            lbOperation.Text = "Load data from server is error";
                //        }));
                //        return;
                //    }
                //    else
                //    {
                //        foreach (var item in data.ResultObj.Items)
                //        {
                //            md.Add(item);
                //        }
                //    }
                //    statusMain.Invoke(new MethodInvoker(delegate
                //    {
                //        if (serial > totalPage) serial = totalPage;
                //        float values = (float)(i + 1) / (float)totalPage * 100;
                //        progressBarImport.Value = (int)values;
                //        lbPercent.Text = $"{((int)values).ToString()}%";
                //    }));
                //}
                if (md.Count == 0)
                {
                    statusMain.Invoke(new MethodInvoker(delegate
                    {
                        lbOperation.Text = "data empty, not data VCPMC for export";
                    }));
                    return;
                }
                #endregion

                #region export
                //var dataExport = data.ResultObj.Items.Where()
                statusMain.Invoke(new MethodInvoker(delegate
                {
                    progressBarImport.Value = 0;
                    lbPercent.Text          = "0%";
                }));
                statusMain.Invoke(new MethodInvoker(delegate
                {
                    lbOperation.Text = "Export to excel...";
                }));
                int      pos       = filePath.LastIndexOf('.');
                string   x1        = filePath.Substring(0, pos);
                string   x2        = filePath.Substring(pos + 1, filePath.Length - pos - 1);
                string[] file      = new string[] { x1, x2 };
                string   path      = string.Empty;
                string   name      = string.Empty;
                string   extension = string.Empty;
                if (file != null && file.Length > 1)
                {
                    extension = file[1];
                    int a = file[0].LastIndexOf("\\");
                    if (a > 2)
                    {
                        path = file[0].Substring(0, a);
                        name = file[0].Substring(a + 1, file[0].Length - a - 1);
                    }
                }
                if (path.Length > 0 && name.Length > 0 && extension.Length > 0)
                {
                    int totalFile = 0;
                    if (md.Count % Core.LimitDisplayExportExcel == 0)
                    {
                        totalFile = md.Count / Core.LimitDisplayExportExcel;
                    }
                    else
                    {
                        totalFile = md.Count / Core.LimitDisplayExportExcel + 1;
                    }
                    serial = 0;
                    int index = 0;
                    while (index < md.Count)
                    {
                        serial++;
                        var datax = md.Skip(index).Take(Core.LimitDisplayExportExcel).ToList();
                        index += Core.LimitDisplayExportExcel;
                        bool check = WriteReportHelper.ExportWork(datax, $"{path}\\{name}-{serial.ToString().PadLeft(3, '0')}.{extension}");
                        datax = null;
                        GC.Collect();
                        statusMain.Invoke(new MethodInvoker(delegate
                        {
                            if (serial > totalFile)
                            {
                                serial = totalFile;
                            }
                            float values            = (float)serial / (float)totalFile * 100;
                            progressBarImport.Value = (int)values;
                            lbPercent.Text          = $"{((int)values).ToString()}%";
                        }));
                    }
                }
                statusMain.Invoke(new MethodInvoker(delegate
                {
                    lbOperation.Text = "Export to excel be finish";
                }));
                toolMain.Invoke(new MethodInvoker(delegate
                {
                    btnExport.Enabled = true;
                }));

                statusMain.Invoke(new MethodInvoker(delegate
                {
                    progressBarImport.Value = 100;
                }));
                #endregion
            }
            catch (Exception)
            {
                statusMain.Invoke(new MethodInvoker(delegate
                {
                    lbOperation.Text = "Export data from server is error";
                }));
            }
        }