using ErrorAnalysis.Repository; using ErrorAnalysis.Repository.Entity; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Menu; namespace ErrorAnalysis.UI { public partial class FrmMain : Form { private string? _connectionString; private List _models; private COModelTable? _curModel; public FrmMain() { InitializeComponent(); } private void btnGetAllPipe_Click(object sender, EventArgs e) { var modelRepository = new COModelRepository(_connectionString); var models = modelRepository.GetCOModels(); } private void rdoMode_CheckedChanged(object sender, EventArgs e) { if (rdoLockSpeed.Checked) { pnlLockPass.Visible = false; pnlLockSpeed.Visible = true; } else { pnlLockPass.Visible = true; pnlLockSpeed.Visible = false; } } private void btnSelectDataSource_Click(object sender, EventArgs e) { var fileDlg = new OpenFileDialog(); fileDlg.Filter = "Data source|*.db"; fileDlg.InitialDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Projects"); fileDlg.FilterIndex = 0; var result = fileDlg.ShowDialog(); 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) { if (string.IsNullOrEmpty(_connectionString)) { MessageBox.Show("Please choose data source first!"); return; } } private void borehole_cmb_SelectedIndexChanged(object sender, EventArgs e) { var control = (sender as ComboBox); var parentControl = control.Parent; var allCmb = parentControl.Controls.OfType().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]; } } } }