UsrDataSource.cs 4.4 KB
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using Asa.FaceControl;
using BLL;
using ClosedXML.Excel;
using Model;

namespace SmartScan
{
    public partial class UsrDataSource : UserControl, ISetMenu
    {

        public UsrDataSource()
        {
            InitializeComponent();            

            CboDataType.Items.Add("None");
            CboDataType.Items.Add("Excel/CSV");
            CboDataType.SelectedIndex = 0;
            TxtDataSource.TextChanged += TxtDataSource_TextChanged;
            TxtDataSource.Text = Config.DataSource_FilePath;
            ChkRecursive.Checked= Config.DataSource_Recursive;
            Asa.FaceControl.Language.SetLanguage(this);
        }

        private void TxtDataSource_TextChanged(object sender, EventArgs e)
        {
            var filestring = TxtDataSource.Text.Trim();
            if (string.IsNullOrEmpty(filestring)) {
                LblFilestatus.Text = Language.Dialog("selectdatasource","请选择数据文件");
            }
            if (!File.Exists(filestring))
            {
                LblFilestatus.Text = Language.Dialog("filenotexists", "文件状态:改文件不存在");
            }
            List<string> titles;
            if (Path.GetExtension(TxtDataSource.Text).ToLower() == ".csv")
            {
                titles = ExtraFileData.ParseCSVFileTitle(TxtDataSource.Text);
            }
            else if (Path.GetExtension(TxtDataSource.Text).ToLower() == ".xlsx")
            {
                try
                {
                    XLWorkbook wb = new XLWorkbook(filestring);
                }
                catch
                {
                    LblFilestatus.Text = Language.Dialog("filepatseerror", "文件内容解析失败");
                    return;
                }
                titles = ExtraFileData.ParseXLSFileTitle(TxtDataSource.Text);
            }
            else
            {
                LblFilestatus.Text = Language.Dialog("fileformaterror", "文件格式不正确");
                return;
            }
            
            txtkey.Text = "";
            CboDataTitle.Items.Clear();
            titles.ForEach(t => {
                CboDataTitle.Items.Add(t);
                txtkey.Text += $"{{{t}}}\r\n";
            });
            if (CboDataTitle.Items.Count > 0)
                CboDataTitle.SelectedIndex = 0;

            if (!string.IsNullOrEmpty(Config.DataSource_DataTitle))
            {
                CboDataTitle.SelectedText = Config.DataSource_DataTitle;
            }
        }

        public Asa.FaceControl.FacePanel GetPanel()
        {
            if (Config.DataSource_Type == "xls")
            {
                CboDataType.SelectedIndex = 1;
            }
            else { 
            
            }
            CboDataKey.Items.Clear();
            CboDataKey.Items.AddRange(BLLCommon.macroKey.ToArray());
            CboDataKey.SelectedIndex = 0;

            if (!string.IsNullOrEmpty(Config.DataSource_DataKey))
            {
                CboDataKey.SelectedText = Config.DataSource_DataKey;
            }

            TxtDataSource.Text = Config.DataSource_FilePath;
            return facePanel1;
        }

        public void Save()
        {
            if (CboDataType.SelectedIndex == 1)
                Config.DataSource_Type = "xls";
            else
                Config.DataSource_Type = "none";

            Config.DataSource_FilePath = TxtDataSource.Text;
            Config.DataSource_DataKey = CboDataKey.Text;
            Config.DataSource_DataTitle = CboDataTitle.Text;
            Config.DataSource_Recursive = ChkRecursive.Checked;
            ExtraFileData.Init();
            BLLCommon.extraKey = ExtraFileData.Titles;
        }

        private void BtnSelectFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.Filter = "Excel files (*.csv;*.xlsx)|*.csv;*.xlsx";
            fileDialog.RestoreDirectory = true;
            if (fileDialog.ShowDialog() != DialogResult.OK)
                return;
            if (Path.GetExtension(fileDialog.FileName).ToLower() == ".csv")
            {

                if (!FrmDataFilePreview.ShowPreview(fileDialog.FileName, out string encodingtxt))
                    return;

                Config.DataSource_Encoding = encodingtxt;

            }
            TxtDataSource.Text = fileDialog.FileName;
        }
    }
}