lx
2025-07-11 05946b151e7010b2b1a851892152e6b5d34151b3
ErrorAnalysis.UI/FrmMain.cs
@@ -1,4 +1,5 @@
using ErrorAnalysis.Repository;
using ErrorAnalysis.Repository.Entity;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Menu;
namespace ErrorAnalysis.UI
@@ -6,7 +7,8 @@
    public partial class FrmMain : Form
    {
        private string? _connectionString;
        private List<COModelTable> _models;
        private COModelTable? _curModel;
        public FrmMain()
        {
            InitializeComponent();
@@ -41,15 +43,51 @@
            if (result == DialogResult.OK)
            {
                pbLoadDB.Show();
                pbLoadDB.Value = 0;
                txtDataPath.Text = fileDlg.FileName;
                txtToolType.Text = fileDlg.SafeFileName.Replace("DB.db", "").Replace("Mcnp", "");
                _connectionString = $"Data Source={fileDlg.FileName};";
                var modelRepository = new COModelRepository(_connectionString);
                pbLoadDB.Value = 50;
                Task.Run(() =>
                {
                    _models = modelRepository.GetCOModels();
                    BeginInvoke(new System.Action(() =>
                    {
                        pbLoadDB.Value = 80;
                        InitInputControl();
                    }));
                    BeginInvoke(new System.Action(() =>
                    {
                        pbLoadDB.Value = 100;
                    }));
                    Thread.Sleep(1000);
                    BeginInvoke(new System.Action(() =>
                    {
                        pbLoadDB.Hide();
                    }));
                });
            }
        }
        private void FrmMain_Load(object sender, EventArgs e)
        {
            cmbSpeedUnit.SelectedIndex = 0;
        }
        private void InitInputControl()
        {
            foreach (var item in gpBorehole.Controls)
                if (item is ComboBox cmb)
                    cmb.Items.Clear();
            if (_models != null)
            {
                cmbBit.Items.AddRange(_models.Select(m => m.BIT).Distinct().ToArray());
            }
        }
        private void btnSelectBore_Click(object sender, EventArgs e)
@@ -59,9 +97,63 @@
                MessageBox.Show("Please choose data source first!");
                return;
            }
            var modelRepository = new COModelRepository(_connectionString);
            var models = modelRepository.GetCOModels();
        }
          
        private void borehole_cmb_SelectedIndexChanged(object sender, EventArgs e)
        {
            var control = (sender as ComboBox);
            var parentControl = control.Parent;
            var allCmb = parentControl.Controls.OfType<Control>().Where(c => c is ComboBox).Select(c => c as ComboBox).ToList();
            if (control.Name == "cmbBit")
            {
                foreach (var item in allCmb)
                {
                    if (item.Name != "cmbBit")
                    {
                        item.Items.Clear();
                    }
                }
            }
            else if (control.Name.Contains("OD"))
            {
                allCmb.FirstOrDefault(a => a.Name == control.Name.Replace("OD", "ID")).Items.Clear();
            }
            else if (control.Name == "cmbCasingID")
            {
                cmbScreenOD.Items.Clear();
                cmbScreenID.Items.Clear();
                cmbTubeOD.Items.Clear();
                cmbTubeID.Items.Clear();
            }
            var selectedCmbs = allCmb.Where(c => c.SelectedIndex != -1).ToList();
            var unSelectedCmbs = allCmb.Where(c => c.SelectedIndex == -1).ToList();
            var selectedModels = _models;
            var modelType = _models[0].GetType();
            foreach (var cmb in selectedCmbs)
            {
                selectedModels = selectedModels.Where(c => modelType.GetProperty(cmb.Tag.ToString()).GetValue(c).ToString() == cmb.Text).ToList();
            }
            foreach (var cmb in unSelectedCmbs)
            {
                cmb.Items.Clear();
                cmb.Enabled = true;
                var currentItems = selectedModels.Where(c => modelType.GetProperty(cmb.Tag.ToString()).GetValue(c).ToString() != "0").Select(c => modelType.GetProperty(cmb.Tag.ToString()).GetValue(c).ToString()).Distinct().ToArray();
                if (currentItems.Length == 0)
                    cmb.Enabled = false;
                cmb.Items.AddRange(currentItems);
                if (currentItems.Length == 1)
                    cmb.Text = currentItems[0];
            }
            if (selectedModels.Count == 1)
            {
                _curModel = selectedModels[0];
            }
        }
    }
}