// Получение ID строки и краткой информации void GetCurrentRowInfo() { var grid = (DataGridView)TabMain.SelectedTab.Controls[0]; try { ID = grid.CurrentRow.Cells[0].Value.exToInt(); ROW_INDEX = grid.CurrentRow.Index; } catch { /* Костыльная заглушка */ } // Если панель не свернута, то ищем информацию if (!FormSplit.Panel2Collapsed) { LabelTrackingDataE.Text = LabelEstimate.Text = ""; // Получаем инфу если выделена одна стрка if (grid.SelectedRows.Count == 1) { try { switch (TabMain.SelectedTab.Name) { case "FPage_Estimate": int listID_E = DataCommon.GetFieldValue(ID, "Estimate_tracklist", "Estimate").exToInt(); LabelEstimate.Text = GetEstimate(ID); LabelTrackingDataE.Text = GetTrackinglist(listID_E); break; case "FPage_Trackinglists": LabelTrackingDataE.Text = GetTrackinglist(ID); break; default: /*string gridId = TabMain.SelectedTab.Name.Split('_')[2]; * var CurrentGrid = (DataGridView)TabMain.SelectedTab.Controls["DataList_Organization_" + gridId];*/ int listID_DEF = DataCommon.GetFieldValue(ID, "Estimate_tracklist", "Estimate").exToInt(); LabelEstimate.Text = GetEstimate(ID); LabelTrackingDataE.Text = GetTrackinglist(listID_DEF); break; } } catch { /* Костыльная заглушка */ } } } #region Внутренние методы string GetEstimate(int ID) { // Возвращаемая строка string Result = ""; // Получение данных из БД string[] info = Estimate.GetGeneralData(ID); // Преобразование строки for (int i = 0; i < info.Length; i++) { Result += info[i] + "\n"; } return(Result); } string GetTrackinglist(int ID) { // Возвращаемая строка string Result = ""; // Получение данных из БД string[] info = Trackinglists.GetGeneralData(ID); // Преобразование строки for (int i = 0; i < info.Length; i++) { Result += info[i] + "\n"; } return(Result); } #endregion }
// Удаление строки void RemoveRow() { var page = TabMain.SelectedTab; var grid = (DataGridView)page.Controls[0]; string table = page.Name.Split('_')[1]; /* Если выбелено более одной строки */ if (grid.SelectedRows.Count > 1) { // Получаем индексы выделенных ячеек int[] indexes = new int[grid.SelectedRows.Count]; for (int i = 0; i < grid.SelectedRows.Count; i++) { indexes[i] = grid.SelectedRows[i].Cells[0].Value.exToInt(); } if (new Remove(indexes, table, CheckMoreRelationships(table, indexes)).ShowDialog() == DialogResult.OK) { Base.RemoveRows(table, indexes); UpdateData(ROW_INDEX, true, true); // Обновление стобца } } /* Если выделена всего одна строка */ else { if (new Remove(CheckRelationships(table, ID)).ShowDialog() == DialogResult.OK) { try { switch (page.Name) { case "FPage_Estimate": Estimate.RemoveRow(ID); break; case "FPage_Trackinglists": Trackinglists.RemoveRow(ID); break; } UpdateData(ROW_INDEX, true); // Обновление стобца } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } bool CheckRelationships(string initialTable, int id) { DataTable checkingTable = new DataTable(); OleDbDataAdapter adapter; // Проверка связанных таблиц using (var connection = new OleDbConnection(Base.DB_CONNECTION_STRING)) { connection.Open(); // Выборка из БД, в зависимости от активной таблицы switch (page.Name) { case "FPage_Trackinglists": adapter = new OleDbDataAdapter($"SELECT * FROM Estimate WHERE Estimate_tracklist={id}", connection); adapter.Fill(checkingTable); break; } } if (checkingTable.Rows.Count != 0) { return(true); // Если есть строки то true } else { return(false); // Если нет строк то false } } bool CheckMoreRelationships(string initialTable, int[] values) { DataTable checkingTable = new DataTable(); OleDbDataAdapter adapter; #region Созданние строки запроса string CONDITION = ""; string CONDITION_COLUMN = "Estimate_tracklist"; for (int i = 0; i < values.Length; i++) { CONDITION += CONDITION_COLUMN + "=" + values[i] + " OR "; } CONDITION = CONDITION.Remove(CONDITION.Length - 4); #endregion // Проверка связанных таблиц using (var connection = new OleDbConnection(Base.DB_CONNECTION_STRING)) { connection.Open(); // Выборка из БД, в зависимости от активной таблицы switch (page.Name) { case "FPage_Trackinglists": adapter = new OleDbDataAdapter($"SELECT * FROM Estimate WHERE {CONDITION}", connection); adapter.Fill(checkingTable); break; } } if (checkingTable.Rows.Count != 0) { return(true); // Если есть строки то true } else { return(false); // Если нет строк то false } } }
// +---------------------------------------------------+ // | ЗАГРУЗКА ФОРМЫ | // +---------------------------------------------------+ private void FormLoad(object sender, EventArgs e) { TabMain.ItemSize = new Size(0, 1); if (selectedIndex.Split('_')[1].Equals("OrganizationEstimate")) { TabMain.SelectTab("FPage_Estimate"); } else { TabMain.SelectTab(selectedIndex); } object[] Values; // Для редактирования #region Косметические изменения формы int constW1 = 305; switch (TabMain.SelectedTab.Name) { case "FPage_CarBrand": Width = constW1; Height = 110; break; case "FPage_CarModel": Width = 337; Height = 150; break; case "FPage_Cars": Width = constW1; Height = 230; break; case "FPage_CarType": Width = constW1; Height = 230; break; case "FPage_Drivers": Width = constW1; Height = 275; break; case "FPage_Estimate": Width = 560; Height = 340; break; case "FPage_Organizations": Width = constW1; Height = 160; break; case "FPage_Staff": Width = constW1; Height = 235; break; case "FPage_StaffPosition": Width = constW1; Height = 110; break; case "FPage_Trackinglists": Width = constW1; Height = 500; break; } Controls.Add(new Panel { BackColor = Color.White, Location = new Point(0, 0), Width = Width, Height = 6 }); TabMain.SendToBack(); #endregion // Заполнение полей в зависимости от типа открываемой формы switch (TYPE) { case DataCommon.FormType.Add: switch (TabMain.SelectedTab.Name) { case "FPage_CarModel": Image img = new Bitmap(Properties.Resources.add, 16, 16); Button_AddNew_CarBrand.BackgroundImage = img; comboBox1.exFill(DB_ID, "Carbrand_name", "CarBrand"); break; case "FPage_Cars": Width = constW1; Height = 230; comboBox2.exFillExtra(DB_ID, "CarModel.ID, [CarBrand]![Carbrand_name] & \" - \" & [CarModel]![Carmodel_name] AS Result", "CarBrand INNER JOIN CarModel ON CarBrand.ID = CarModel.Carmodel_brand"); comboBox3.exFillExtra(DB_ID, "CarType.ID, \"[\" & [CarType]![Cartype_code] & \"] - \" & [CarType]![Cartype_name] & \" - \" & [CarType]![Cartype_capacity] AS Result", "CarType"); break; case "FPage_Estimate": comboBox4.exFill(DB_ID, "Trackinglist_number", "Trackinglists", "Trackinglists.ID NOT IN(SELECT Estimate.Estimate_tracklist FROM Estimate)"); break; case "FPage_Organizations": comboBox5.SelectedIndex = 0; break; case "FPage_Staff": comboBox6.exFill(DB_ID, "Staffposition_name", "StaffPosition"); break; case "FPage_Trackinglists": int lastnum = Trackinglists.GetLastTrackingNumber(); if (lastnum == 0) { textBox23.Text = "0"; } else { textBox23.Text = (lastnum + 1).ToString(); } comboBox7.exFill(DB_ID, "Organization_name", "Organizations", "Organization_ratio=0"); comboBox8.exFillExtra(DB_ID, "Cars.ID, [CarBrand]![Carbrand_name] & \" \" & [CarModel]![Carmodel_name] & \", Гос. номер: \" & [Cars]![Car_number] AS Result", "(CarBrand INNER JOIN CarModel ON CarBrand.ID = CarModel.Carmodel_brand) INNER JOIN Cars ON CarModel.ID = Cars.Car_model"); comboBox9.exFillExtra(DB_ID, "Drivers.ID, [Drivers]![Driver_lastname] & \" \" & [Drivers]![Driver_firstname] & \" \" & [Drivers]![Driver_thirdname] AS Result", "Drivers"); comboBox10.exFillExtra(DB_ID, "Staff.ID, [Staff]![Staff_lastname] & \" \" & [Staff]![Staff_firstname] & \" \" & [Staff]![Staff_thirdname] AS Result", "Staff"); comboBox11.exFillExtra(DB_ID, "Staff.ID, [Staff]![Staff_lastname] & \" \" & [Staff]![Staff_firstname] & \" \" & [Staff]![Staff_thirdname] AS Result", "Staff"); comboBox12.exFillExtra(DB_ID, "Staff.ID, [Staff]![Staff_lastname] & \" \" & [Staff]![Staff_firstname] & \" \" & [Staff]![Staff_thirdname] AS Result", "Staff"); comboBox13.exFill(DB_ID, "Organization_name", "Organizations", "Organization_ratio=1"); comboBox14.exFill(DB_ID, "Organization_name", "Organizations", "Organization_ratio=2"); if (comboBox11.Items.Count > 0) { comboBox11.SelectedIndex = 1; } if (comboBox12.Items.Count > 0) { comboBox12.SelectedIndex = 1; } break; } break; case DataCommon.FormType.Edit: switch (TabMain.SelectedTab.Name) { case "FPage_CarBrand": Values = Base.GetRowFields(ID, "CarBrand"); textBox1.Text = Values[0].ToString(); break; case "FPage_CarModel": Values = Base.GetRowFields(ID, "CarModel"); comboBox1.exFill(DB_ID, "Carbrand_name", "CarBrand"); comboBox1.SelectedValue = (int)Values[0]; textBox2.Text = Values[1].ToString(); break; case "FPage_Cars": Values = Base.GetRowFields(ID, "Cars"); comboBox2.exFillExtra(DB_ID, "CarModel.ID, [CarBrand]![Carbrand_name] & \" - \" & [CarModel]![Carmodel_name] AS Result", "CarBrand INNER JOIN CarModel ON CarBrand.ID = CarModel.Carmodel_brand"); comboBox3.exFillExtra(DB_ID, "CarType.ID, \"[\" & [CarType]![Cartype_code] & \"] - \" & [CarType]![Cartype_name] & \" - \" & [CarType]![Cartype_capacity] AS Result", "CarType"); comboBox2.SelectedValue = (int)Values[0]; textBox3.Text = Values[1].ToString(); textBox4.Text = Values[2].ToString(); comboBox3.SelectedValue = (int)Values[3]; break; case "FPage_CarType": Values = Base.GetRowFields(ID, "CarType"); textBox5.Text = Values[0].ToString(); textBox6.Text = Values[1].ToString(); textBox7.Text = Values[2].ToString(); textBox33.Text = Values[3].ToString(); textBox32.Text = Values[4].ToString(); break; case "FPage_Drivers": Values = Base.GetRowFields(ID, "Drivers"); textBox9.Text = Values[0].ToString(); textBox8.Text = Values[1].ToString(); textBox10.Text = Values[2].ToString(); textBox11.Text = Values[3].ToString(); textBox16.Text = Values[4].ToString(); break; case "FPage_Estimate": int ThisTrackingList = DataCommon.GetFieldValue(ID, "Estimate_tracklist", "Estimate").exToInt(); Values = Base.GetRowFields(ID, "Estimate"); comboBox4.exFill(DB_ID, "Trackinglist_number", "Trackinglists", $"Trackinglists.ID NOT IN(SELECT Estimate.Estimate_tracklist FROM Estimate WHERE Trackinglists.ID NOT IN({ThisTrackingList}))"); textBox13.Text = Values[0].ToString(); textBox14.Text = Values[1].ToString(); comboBox4.SelectedValue = (int)Values[2]; //comboBox4.Enabled = false; dateTimePicker1.Value = Convert.ToDateTime(Values[3]); textBox15.Text = Values[4].ToString(); textBox12.Text = Values[5].ToString(); //Пробег textBox24.Text = Values[6].ToString(); textBox25.Text = Values[7].ToString(); textBox26.Text = Values[8].ToString(); textBox31.Text = Values[9].ToString(); textBox29.Text = Values[10].ToString(); textBox30.Text = Values[11].ToString(); textBox27.Text = Values[12].ToString(); textBox28.Text = Values[13].ToString(); textBox35.Text = Values[14].ToString(); break; case "FPage_Organizations": Values = Base.GetRowFields(ID, "Organizations"); textBox17.Text = Values[0].ToString(); comboBox5.SelectedIndex = (int)Values[1]; break; case "FPage_Staff": Values = Base.GetRowFields(ID, "Staff"); comboBox6.exFill(DB_ID, "Staffposition_name", "StaffPosition"); textBox20.Text = Values[0].ToString(); textBox21.Text = Values[1].ToString(); textBox19.Text = Values[2].ToString(); comboBox6.SelectedValue = (int)Values[3]; break; case "FPage_StaffPosition": Values = Base.GetRowFields(ID, "StaffPosition"); textBox18.Text = Values[0].ToString(); break; case "FPage_Trackinglists": Values = Base.GetRowFields(ID, "Trackinglists"); comboBox7.exFill(DB_ID, "Organization_name", "Organizations", "Organization_ratio=0"); comboBox8.exFillExtra(DB_ID, "Cars.ID, [CarBrand]![Carbrand_name] & \" \" & [CarModel]![Carmodel_name] & \", Гос. номер: \" & [Cars]![Car_number] AS Result", "(CarBrand INNER JOIN CarModel ON CarBrand.ID = CarModel.Carmodel_brand) INNER JOIN Cars ON CarModel.ID = Cars.Car_model"); comboBox9.exFillExtra(DB_ID, "Drivers.ID, [Drivers]![Driver_lastname] & \" \" & [Drivers]![Driver_firstname] & \" \" & [Drivers]![Driver_thirdname] AS Result", "Drivers"); comboBox10.exFillExtra(DB_ID, "Staff.ID, [Staff]![Staff_lastname] & \" \" & [Staff]![Staff_firstname] & \" \" & [Staff]![Staff_thirdname] AS Result", "Staff"); comboBox11.exFillExtra(DB_ID, "Staff.ID, [Staff]![Staff_lastname] & \" \" & [Staff]![Staff_firstname] & \" \" & [Staff]![Staff_thirdname] AS Result", "Staff"); comboBox12.exFillExtra(DB_ID, "Staff.ID, [Staff]![Staff_lastname] & \" \" & [Staff]![Staff_firstname] & \" \" & [Staff]![Staff_thirdname] AS Result", "Staff"); comboBox13.exFill(DB_ID, "Organization_name", "Organizations", "Organization_ratio=1"); comboBox14.exFill(DB_ID, "Organization_name", "Organizations", "Organization_ratio=2"); textBox22.Text = Values[0].ToString(); textBox23.Text = Values[1].ToString(); dateTimePicker2.Value = Convert.ToDateTime(Values[2]); comboBox7.SelectedValue = (int)Values[3]; comboBox8.SelectedValue = (int)Values[4]; comboBox9.SelectedValue = (int)Values[5]; comboBox10.SelectedValue = (int)Values[6]; comboBox11.SelectedValue = (int)Values[7]; comboBox12.SelectedValue = (int)Values[8]; comboBox13.SelectedValue = (int)Values[9]; comboBox14.SelectedValue = (int)Values[10]; break; } break; } if (TYPE == DataCommon.FormType.Edit) { // Замена событий Button_Add.Click -= Button_Add_Click; Button_Add.Click += Button_Save_Click; // Прочие изменения Text = "Редактировать запись"; Button_Add.Text = "Сохранить"; } }
// +---------------------------------------------------+ // | ОБНОВЛЕНИЕ ДАННЫХ | // +---------------------------------------------------+ private void Button_Save_Click(object sender, EventArgs e) { switch (TabMain.SelectedTab.Name) { case "FPage_CarBrand": CarBrand carBrand = new CarBrand { BrandName = textBox1.Text }; carBrand.EditRow(ID); break; case "FPage_CarModel": CarModel carModel = new CarModel { Brand = comboBox1.SelectedValue.ToString(), ModelName = textBox2.Text }; carModel.EditRow(ID); break; case "FPage_Cars": Cars cars = new Cars { Model = comboBox2.SelectedValue.ToString(), Number = textBox3.Text, InvNumber = textBox4.Text, Type = comboBox3.SelectedValue.ToString() }; cars.EditRow(ID); break; case "FPage_CarType": CarType carType = new CarType { TypeCode = textBox5.Text, TypeName = textBox6.Text, Capacity = textBox7.Text, InWorkRate = textBox33.Text, InWaitRate = textBox32.Text }; carType.EditRow(ID); break; case "FPage_Drivers": Drivers drivers = new Drivers { FirstName = textBox9.Text, LastName = textBox8.Text, ThirdName = textBox10.Text, Licence = textBox11.Text, Class = textBox16.Text }; drivers.EditRow(ID); break; case "FPage_Estimate": Estimate estimate = new Estimate { PacketNumber = textBox13.Text, Order = textBox14.Text, TrackinglistNum = comboBox4.SelectedValue.ToString(), TrackinglistDate = dateTimePicker1.Value.ToShortDateString(), Lot = textBox15.Text, Duration = textBox12.Text, InWorkTime = textBox24.Text, InWorkRate = textBox25.Text, InWorkHols = textBox26.Text, InWorkPrice = textBox31.Text, InWaitTime = textBox29.Text, InWaitRate = textBox30.Text, InWaitHols = textBox27.Text, InWaitPrice = textBox28.Text, FinalPrice = textBox35.Text }; estimate.EditRow(ID); break; case "FPage_Organizations": Organisations organisations = new Organisations { Name = textBox17.Text, Ratio = comboBox5.SelectedIndex.ToString() }; organisations.EditRow(ID); break; case "FPage_Staff": Staff staff = new Staff { FirstName = textBox20.Text, LastName = textBox21.Text, ThirdName = textBox19.Text, Position = comboBox6.SelectedValue.ToString() }; staff.EditRow(ID); break; case "FPage_StaffPosition": StaffPosition staffPosition = new StaffPosition { PositionName = textBox18.Text }; staffPosition.EditRow(ID); break; case "FPage_Trackinglists": Trackinglists trackinglists = new Trackinglists { Series = textBox22.Text, Number = textBox23.Text, Date = dateTimePicker2.Value.ToShortDateString(), Organization = comboBox7.SelectedValue.ToString(), Transport = comboBox8.SelectedValue.ToString(), Driver = comboBox9.SelectedValue.ToString(), Dispatcher = comboBox10.SelectedValue.ToString(), Medic = comboBox11.SelectedValue.ToString(), Mechanic = comboBox12.SelectedValue.ToString(), Organization_2 = comboBox13.SelectedValue.ToString(), Organization_3 = comboBox14.SelectedValue.ToString() }; trackinglists.EditRow(ID); break; } }
private void ReportButtonClick(object sender, EventArgs e) { var item = ((Button)sender); FolderBrowserDialog dialog = new FolderBrowserDialog { Description = "Выберите папку для сохранения отчета", RootFolder = Environment.SpecialFolder.MyComputer, ShowNewFolderButton = true }; switch (Mode.SelectedIndex) { case 0: // Путевые листы switch (item.Name) { case "B_Trackinglist": if (dialog.ShowDialog() == DialogResult.OK) { if (DataList_Report.SelectedRows.Count > 1) { // Получаем индексы выделенных ячеек int[] indexes = new int[DataList_Report.SelectedRows.Count]; for (int i = 0; i < DataList_Report.SelectedRows.Count; i++) { indexes[i] = DataList_Report.SelectedRows[i].Cells[0].Value.exToInt(); } Trackinglists.Report(ReportType.Trackinglist, dialog.SelectedPath, ArrayOfIDs: indexes); } else { Trackinglists.Report(ReportType.Trackinglist, dialog.SelectedPath, ID); } } break; case "B_Reference": if (new Reference().ShowDialog() == DialogResult.OK) { if (dialog.ShowDialog() == DialogResult.OK) { Trackinglists.Report(ReportType.Reference, dialog.SelectedPath, ID); } } break; case "B_Registry": if (new Duration().ShowDialog() == DialogResult.OK) { Trackinglists.Report(ReportType.Registry, ID: ID); } break; } break; case 1: // Смета switch (item.Name) { case "B_Trackinglist": int T_ID = Convert.ToInt32(DataCommon.GetFieldValue(ID, "Estimate_tracklist", "Estimate")); Trackinglists.Report(ReportType.Trackinglist, ID: T_ID); break; } break; } }