Лабораторный практикум. Лабораторная работа Обследование предметной области Построение модели ide создание контекстной диаграммы Создание диаграммы декомпозиции Создание диаграммы
Скачать 5.73 Mb.
|
Рисунок 31 – Окно «Правка столбцов» После изменения заголовков столбцов, имена в левой части окна будут заменены на русские. 230 Для − , соответственно теперь этот элемент был привязан к верхней части панели. − − − − Для объекта − − Добавьте метод изменения сортировки по столбцам в событие «ColumnSortModeChanged»: private void dataGridView1_ColumnSortModeChanged( object sender, DataGridViewColumnEventArgs e) { this .dataTable1TableAdapter.Fill( this .dataSet1.DataTable1); this .booksTableAdapter.Fill( this .dataSet1.Books); LoadAuthorsFromProcToTheList(); } Добавьте обработчик события «CellContentClick»: private void dataGridView1_CellContentClick( object sender, DataGridViewCellEventArgs e) { this .dataTable1TableAdapter.Fill( this .dataSet1.DataTable1); 231 this .booksTableAdapter.Fill( this .dataSet1.Books); LoadAuthorsFromProcToTheList(); } 15.11 Настройка объекта «PictureBox» Для объекта установите следующие свойства: − <(DataBinding) Image> = − Добавьте событие, которое по щелчку левой кнопки мыши будет вызывать диалоговое окно с просьбой указать файл картинки, которую следует загрузить в базу данных: private void pictureBox1_Click( object sender, EventArgs e) { string address = "" ; address = SelectOpenFileDialogFileName(address); if (address != "Canceld" ) { PutImageBinaryIntoDb(@address); // запись изображения в БД this .booksTableAdapter.Fill( this .dataSet1.Books); } } Добавьте метод для загрузки изображения в базу данных «PutImageBinaryIntoDb», код которого приведен ниже: private void PutImageBinaryIntoDb( string iFile) { // конвертация изображения в байты byte [] imageData = null ; FileInfo fInfo = new FileInfo(iFile); long numBytes = fInfo.Length; FileStream fStream = new FileStream(iFile, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fStream); imageData = br.ReadBytes(( int )numBytes); // получение расширения файла изображения не забыв удалить точку перед расширением string iImageExtension = (Path.GetExtension(iFile)).Replace( "." , "" ).ToLower(); // запись изображения в БД using (SqlConnection sqlConnection = new SqlConnection ( @"Data Source=.\SQLEXPRESS; Initial Catalog=BookShopDB; Integrated Security = True" )) // строка подключения к БД { 232 string commandText = "UPDATE Books SET screen = @screen, screen_format = @screen_format WHERE (BookID = @BookID)" ; SqlCommand command = new SqlCommand(commandText, sqlConnection); command.Parameters.AddWithValue( "@screen" , ( object )imageData); // записываем само изображение command.Parameters.AddWithValue( "@screen_format" , iImageExtension); // записываем расширение изображения command.Parameters.AddWithValue( "@BookID" , this .dataGridView1.Rows[ this .dataGridView1.CurrentRow.Index].Cells[ "bookIDDataGridViewTextBo xColumn" ].Value); // записываем расширение изображения sqlConnection.Open(); command.ExecuteNonQuery(); sqlConnection.Close(); } } 15.12 Кнопка «Фильтры сортировки и поиска» Для кнопки − − Введите дополнительную переменную flagHeight и событию ; private void button5_Click( object sender, EventArgs e) { if (flagHeight) this .Height -= 200; else this .Height += 200; flagHeight = !flagHeight; } − Событию object sender, EventArgs e) { toolTip1.SetToolTip(pictureBox1, "Нажмите для изменения картинки" ); } 15.13 Метод загрузки списка авторов из базы данных с помощью хранимой процедуры Добавьте метод, загружающий список авторов из базы данных с помощью хранимой процедуры, код метода приведен ниже: private void LoadAuthorsFromProcToTheList() { List< string > listOfAuthors = new List< string >(); using (SqlConnection sqlConnection = 233 new SqlConnection ( @"Data Source=.\SQLEXPRESS; Initial Catalog=BookShopDB; Integrated Security = True" )) // строка подключения к БД { sqlConnection.Open(); SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = sqlConnection; int BookID = 0; SqlDataReader sqlReader; sqlCommand.CommandText = @"exec spBookAuthorsList @BookID" ; string iTrimText = null ; for ( int i = 0; i < dataGridView1.Rows.Count; i++) { BookID = Convert.ToInt32( this .dataGridView1.Rows[i].Cells[ "authorListIDDataGridViewTextBoxColumn" ].Va lue); sqlCommand.Parameters.AddWithValue( "@BookID" , BookID); sqlReader = sqlCommand.ExecuteReader(); iTrimText = null ; while (sqlReader.Read()) // считываем и вносим в лист результаты { iTrimText += sqlReader[ "Authors" ].ToString(); iTrimText += "; " ; } try { iTrimText = iTrimText.Remove(iTrimText.Length - 2, 2); this .dataGridView1.Rows[i].Cells[ "Authors" ].Value = iTrimText; } catch (Exception ex) { } sqlReader.Close(); sqlCommand.Parameters.Clear(); } sqlConnection.Close(); } return ; } 15.14 Кнопка «Поиск» Для кнопки − − Событию object sender, EventArgs e) { switch (textBox1.Text) { 234 case "Название книги" : filterString = "TitleBookName" ; break ; case "Страниц" : filterString = "Pages" ; break ; case "Цена" : filterString = "Price" ; break ; } if (String.IsNullOrEmpty(textBox2.Text)) booksBindingSource.Filter = "" ; else { try { booksBindingSource.Filter = "Convert ([" + filterString + "]," + "'System.String') LIKE '" + textBox2.Text + "%'" ; } catch (Exception ex) { MessageBox.Show( "Невозможно выполнить данный поиск" ); } } this .dataTable1TableAdapter.Fill( this .dataSet1.DataTable1); this .booksTableAdapter.Fill( this .dataSet1.Books); LoadAuthorsFromProcToTheList(); } 15.15 Кнопка «Снять фильтр» Для кнопки − − Событию object sender, EventArgs e) { this .booksBindingSource.Filter = "" ; this .dataTable1TableAdapter.Fill( this .dataSet1.DataTable1); this .booksTableAdapter.Fill( this .dataSet1.Books); LoadAuthorsFromProcToTheList(); } 15.16 Кнопка «ОК» Для кнопки − − Событию object sender, EventArgs e) { switch (textBox4.Text) { case "Название книги" : filterString = "TitleBookName" ; break ; case "Страниц" : filterString = "Pages" ; break ; case "Цена" : filterString = "Price" ; break ; } 235 try { this .booksBindingSource.Filter = "(" + filterString + " LIKE '" + textBox3.Text + "*')" ; } catch (Exception ex) { MessageBox.Show( "Не могу установить данный фильтр" ); } this .dataTable1TableAdapter.Fill( this .dataSet1.DataTable1); this .booksTableAdapter.Fill( this .dataSet1.Books); LoadAuthorsFromProcToTheList(); } 15.17 Кнопка «Сортировка» Для кнопки − − Событию object sender, EventArgs e) { int field = 0; switch (textBox6.Text) { case "Название книги" : field = 0; break ; case "Страниц" : field = 1; break ; case "Цена" : field = 2; break ; case "Авторы" : field = 3; break ; } if (field != 3) { switch (comboBox1.SelectedIndex) { case 0: dataGridView1.Sort(dataGridView1.Columns[field], ListSortDirection.Ascending); break ; case 1: dataGridView1.Sort(dataGridView1.Columns[field], ListSortDirection.Descending); break ; } } else MessageBox.Show( "Не могу отсортировать столбец авторов" ); this .dataTable1TableAdapter.Fill( this .dataSet1.DataTable1); this .booksTableAdapter.Fill( this .dataSet1.Books); LoadAuthorsFromProcToTheList(); } 236 15.18 Кнопки «Корзина» и «Добавить в корзину» Добавьте две кнопки и установите их свойства 237 private FrmAuthors FormAuthors; Введите переменные с атрибутом public, показанные ниже: public int stateForm; public int bookID; Нажмите на форме <Меню> → <Работа с таблицами> → <Авторы>. В описании метода object sender, EventArgs e) { stateForm = 10; FormAuthors = new FrmAuthors { Owner = this }; FormAuthors.ShowDialog(); } Создайте обработчики событий для остальных кнопок главного меню, при этом объявите переменные остальных форм с атрибутом public. Настройте остальные формы и расположенные на них элементы, при этом добавляйте соответствующие ссылки на источники данных в «DataSet». 15.20 Добавление обработчиков событий для формы «Авторы» В обозревателе решений перейдите к форме Authors_Load( object sender, EventArgs e) { // TODO: данная строка кода позволяет загрузить данные в таблицу "dataSet1.Authors". При необходимости она может быть перемещена или удалена. this .authorsTableAdapter.Fill( this .dataSet1.Authors); } Добавьте обработчик события на закрытие формы: private void FrmAuthors_FormClosing( object sender, FormClosingEventArgs e) { this .authorsTableAdapter.Update( this .dataSet1.Authors); } Добавьте обработчик события для открытия специальной формы для выбора даты: int currentCol, currentRow; public FrmDate FormDate; public string date; public int state; private void toolStripButton1_Click( object sender, EventArgs e) { this .authorsTableAdapter.Update( this .dataSet1.Authors); 238 } private void dataGridView1_Click( object sender, EventArgs e) { FrmMain global = this .Owner as FrmMain; state = global.stateForm; if ( this .dataGridView1.CurrentCell.ColumnIndex == 4) { currentCol = this .dataGridView1.CurrentCell.ColumnIndex; currentRow = this .dataGridView1.CurrentCell.RowIndex; FormDate = new FrmDate { Owner = this }; FormDate.ShowDialog(); try { this .dataGridView1[currentCol, currentRow].Value = Convert.ToDateTime(date); } catch (Exception ex) { } } } 15.21 Добавление обработчиков событий для формы «Клиенты» В обозревателе решений перейдите к форме FrmClients_Load( object sender, EventArgs e) { this .clientsTableAdapter.Fill( this .dataSet1.Clients); } Добавьте обработчик события на закрытие формы: private void FrmClients_FormClosing( object sender, FormClosingEventArgs e) { this .clientsTableAdapter.Update( this .dataSet1.Clients); } Добавьте обработчик события для открытия специальной формы для выбора даты: int currentCol, currentRow; public FrmDate FormDate; public string date; public int state; private void dataGridView1_Click( object sender, EventArgs e) { FrmMain global = this .Owner as FrmMain; state = global.stateForm; if ( this .dataGridView1.CurrentCell.ColumnIndex == 4) { 239 currentCol = this .dataGridView1.CurrentCell.ColumnIndex; currentRow = this .dataGridView1.CurrentCell.RowIndex; FormDate = new FrmDate { Owner = this }; FormDate.ShowDialog(); this .dataGridView1[currentCol, currentRow].Value = Convert.ToDateTime(date); } } 15.22 Добавление обработчиков событий для формы «Выбор даты» В обозревателе решений перейдите к форме Добавьте обработчик события «DateSelected» на элемент «MonthCalendar»: private void monthCalendar1_DateSelected( object sender, DateRangeEventArgs e) { var dateTime = monthCalendar1.SelectionRange.Start; textBox1.Text = dateTime.ToShortDateString(); } Добавьте обработчик события «Click» на кнопку «Подтвердить выбор даты»: private void button1_Click( object sender, EventArgs e) { FrmClients main = this .Owner as FrmClients; if ((main != null ) && (main.state == 11)) { main.date = textBox1.Text; this .Close(); return ; } FrmAuthors main2 = this .Owner as FrmAuthors; if ((main2 != null ) && (main2.state == 10)) { main2.date = textBox1.Text; this .Close(); return ; } } 15.23 Добавление обработчиков событий для формы «Поставщики» В обозревателе решений перейдите к форме FrmDeliveries_Load( object sender, EventArgs e) { this .deliveriesTableAdapter.Fill( this .dataSet1.Deliveries); 240 this .dataSet1.Deliveries.Columns[0].AutoIncrementSeed = this .dataSet1.Deliveries.Rows.Count + 1; this .dataSet1.Deliveries.Columns[0].AutoIncrementStep = 1; } Добавьте обработчик события на закрытие формы: private void FrmDeliveries_FormClosing( object sender, FormClosingEventArgs e) { try { this .deliveriesTableAdapter.Update( this .dataSet1.Deliveries); } catch (Exception ex) { } } 15.24 Добавление обработчиков событий для формы «Редактирование книги» В обозревателе решений перейдите к форме Объявите следующие перменные: public DataSet dsForOrder; public BindingSource binSrcForOrder; public int ? ListID; public string cmb; Добавьте обработчик события на загрузку формы: private void FrmEditBooks_Load( object sender, EventArgs e) { this .publishHouseTableAdapter.Fill( this .dataSet1.PublishHouse); this .spListAllAuthorsTableAdapter.Fill( this .dataSet1.spListAllAuthors); this .authorsTableAdapter.Fill( this .dataSet1.Authors); this .authorListTableAdapter.Fill( this .dataSet1.AuthorList); FrmMain main = this .Owner as FrmMain; dsForOrder = new DataSet(); dsForOrder = main.dsFromMain; binSrcForOrder = new BindingSource(); binSrcForOrder = main.bsFromMain; this .textBox1.DataBindings.Add( new System.Windows.Forms.Binding( "Text" , this .binSrcForOrder, "TitleBookName" , true )); this .textBox2.DataBindings.Add( new System.Windows.Forms.Binding( "Text" , this .binSrcForOrder, "Pages" , true )); this .textBox3.DataBindings.Add( new System.Windows.Forms.Binding( "Text" , this .binSrcForOrder, "AuthorListID" , true )); this .label7.DataBindings.Add( new System.Windows.Forms.Binding( "Text" , this .binSrcForOrder, "PublishID" , true )); cmb = label7.Text; try { this .comboBox1.SelectedValue = Convert.ToInt32(cmb); } catch (Exception ex) { } this .label4.DataBindings.Add( new System.Windows.Forms.Binding( "Text" , this .binSrcForOrder, "BookID" , true )); this .textBox4.DataBindings.Add( new Binding( "Text" , this .binSrcForOrder, "Price" , true )); 241 try { ListID = Convert.ToInt32( this .textBox3.Text); } catch ( Exception ex ) { } this .spBookAuthorsListTableAdapter.Fill( this .bookShopDBDataSet1.spBookAuthorsList, ref ListID); } Добавьте обработчик события «Click» на кнопку «Добавить автора»: private void button1_Click( object sender, EventArgs e) { using (SqlConnection sqlConnection = new SqlConnection ( @"Data Source=.\SQLEXPRESS; Initial Catalog=BookShopDB; Integrated Security = True" )) // строка подключения к БД { string commandText = "INSERT AuthorList (AuthorListID, AuthorID) VALUES (@AuthorListID, @AuthorID)" ; SqlCommand command = new SqlCommand(commandText, sqlConnection); command.Parameters.AddWithValue( "@AuthorListID" , textBox3.Text); command.Parameters.AddWithValue( "@AuthorID" , this .dataGridView3.Rows[ this .dataGridView3.CurrentRow.Index].Cells[ "AuthorID" ].Value); sqlConnection.Open(); try { command.ExecuteNonQuery(); } catch (Exception ex) { } sqlConnection.Close(); } this .spBookAuthorsListTableAdapter.Fill( this .bookShopDBDataSet1.spBookAuthorsList, ref ListID); } Добавьте обработчик события «Click» на кнопку «Удалить автора»: private void button2_Click( object sender, EventArgs e) { if ( this .dataGridView2.Rows.Count != 0) { using (SqlConnection sqlConnection = new SqlConnection ( @"Data Source=.\SQLEXPRESS; Initial Catalog=BookShopDB; Integrated Security = True" )) // строка подключения к БД { string commandText = "DELETE FROM AuthorList WHERE (AuthorListID = @AuthorListID AND AuthorID = @AuthorID)" ; SqlCommand command = new SqlCommand(commandText, sqlConnection); command.Parameters.AddWithValue( "@AuthorListID" , textBox3.Text); string aID = Convert.ToString( this .dataGridView2.Rows[ this .dataGridView2.CurrentRow.Index].Cells[1].Value ); command.Parameters.AddWithValue( "@AuthorID" , this .dataGridView2.Rows[ this .dataGridView2.CurrentRow.Index].Cells[1].Value); sqlConnection.Open(); try { 242 command.ExecuteNonQuery(); } catch (Exception ex) { } sqlConnection.Close(); } this .spBookAuthorsListTableAdapter.Fill( this .bookShopDBDataSet1.spBookAuthorsList, ref ListID); } } Добавьте обработчик события «Click» на кнопку «Отмена»: private void button4_Click( object sender, EventArgs e) { FrmMain main = this .Owner as FrmMain; if (main.stateForm == 1) this .Close(); if (main.stateForm == 2) { using (SqlConnection sqlConnection = new SqlConnection ( @"Data Source=.\SQLEXPRESS; Initial Catalog=BookShopDB; Integrated Security = True" )) // строка подключения к БД { string commandText = "DELETE FROM Books WHERE (BookID = @BookID)" ; SqlCommand command = new SqlCommand(commandText, sqlConnection); command.Parameters.AddWithValue( "@BookID" , Convert.ToInt32(label4.Text)); sqlConnection.Open(); try { command.ExecuteNonQuery(); } catch (Exception ex) { } sqlConnection.Close(); } main.UpdateFormChanges(); this .Close(); } } Добавьте обработчик события «Click» на кнопку «Сохранить изменения и выйти»: private void button3_Click( object sender, EventArgs e) { using (SqlConnection sqlConnection = new SqlConnection ( @"Data Source=.\SQLEXPRESS; Initial Catalog=BookShopDB; Integrated Security = True" )) // строка подключения к БД { 243 string commandText = "UPDATE Books SET TitleBookName = @TitleBookName, Pages = @Pages, Price = @Price, PublishID = @PublishID WHERE (BookID = @BookID)" ; SqlCommand command = new SqlCommand(commandText, sqlConnection); Decimal Price; try { Price = Convert.ToDecimal(textBox4.Text); } catch (Exception ex) { Price = 0; } command.Parameters.AddWithValue( "@TitleBookName" , textBox1.Text); command.Parameters.AddWithValue( "@Pages" , Convert.ToInt32(textBox2.Text)); command.Parameters.AddWithValue( "@BookID" , Convert.ToInt32(label4.Text)); command.Parameters.AddWithValue( "@Price" , Price); command.Parameters.AddWithValue( "@PublishID" , Convert.ToInt32(comboBox1.SelectedValue)); sqlConnection.Open(); try { command.ExecuteNonQuery(); FrmMain main = this .Owner as FrmMain; main.UpdateFormChanges(); } catch (Exception ex) { } sqlConnection.Close(); } this .Close(); } |