Лабораторный практикум. Лабораторная работа Обследование предметной области Построение модели ide создание контекстной диаграммы Создание диаграммы декомпозиции Создание диаграммы
Скачать 5.73 Mb.
|
15.25 Добавление обработчиков событий для формы «Издательства» В обозревателе решений перейдите к форме FrmPublishHouse_Load( object sender, EventArgs e) { this .publishHouseTableAdapter.Fill( this .dataSet1.PublishHouse); } Добавьте обработчик события на закрытие формы: private void FrmPublishHouse_FormClosing( object sender, FormClosingEventArgs e) { try { this .publishHouseTableAdapter.Update( this .dataSet1.PublishHouse); } catch (Exception ex) { } } 244 15.26 Добавление обработчиков событий для формы «Оформление заказа» В обозревателе решений перейдите к форме FrmPurchases_Load( object sender, EventArgs e) { this .currentOrderTableAdapter.Fill( this .dataSet1.CurrentOrder); this .deliveriesInfoTableAdapter.Fill( this .dataSet1.DeliveriesInfo); this .clientInfoTableAdapter.Fill( this .dataSet1.ClientInfo); main = this .Owner as FrmMain; SourceDataToBindingBucketGoods(); this .label2.Text = main.amountGoods.ToString() + " шт." ; this .label4.Text = CalcTotalPrice().ToString(); this .comboBox1.SelectedIndex = -1; this .comboBox2.SelectedIndex = -1; } Добавьте метод расчета итоговой суммы заказа: private int CalcTotalPrice() { int totalSum = 0; for ( int i = 0; i < this .dataGridView1.Rows.Count; i++) totalSum += Convert.ToInt32( this .dataGridView1.Rows[i].Cells[3].Value) * Convert.ToInt32( this .dataGridView1.Rows[i].Cells[4].Value); return totalSum; } Добавьте метод создания источника данных для корзины товаров: BindingSource bs = new BindingSource(); private void SourceDataToBindingBucketGoods() { int BookID = 2; string conStr = @"Data Source=.\SQLEXPRESS; Initial Catalog=BookShopDB; Integrated Security=True;" ; // создание строки подключения SqlConnection connection = new SqlConnection(conStr); connection.Open(); SqlCommand cmd = new SqlCommand( @"SELECT BookID, TitleBookName, Pages, Price FROM Books WHERE BookID = @BookID" , connection); foreach (DictionaryEntry entry in main.bucketGoods) { BookID = Convert.ToInt32(entry.Key); break ; } cmd.Parameters.AddWithValue( "@BookID" , BookID); SqlDataReader reader = cmd.ExecuteReader(); DataTable table = CreateSchemaFromReader(reader, "BooksToOrder" ); // создание новой таблицы на основе схемы, предоставляемой DataReader reader.Close(); cmd.Parameters.Clear(); foreach (DictionaryEntry entry in main.bucketGoods) { cmd.Parameters.Clear(); BookID = Convert.ToInt32(entry.Key); cmd.Parameters.AddWithValue( "@BookID" , BookID); reader = cmd.ExecuteReader(); WriteDataFromReader(table, reader, Convert.ToInt32(entry.Value)); // запись данных в таблицу с помощью DataReader 245 reader.Close(); // Каждый раз закрываем DataReader } reader.Close(); connection.Close(); this .dataGridView1.DataSource = table; this .dataGridView1.Columns[0].HeaderCell.Value = "Код" ; this .dataGridView1.Columns[0].Width = 65; this .dataGridView1.Columns[1].HeaderCell.Value = "Название книги" ; this .dataGridView1.Columns[1].Width = 250; this .dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; this .dataGridView1.Columns[2].HeaderCell.Value = "Страниц" ; this .dataGridView1.Columns[3].HeaderCell.Value = "Цена за 1 шт." ; this .dataGridView1.Columns[3].Width = 110; this .dataGridView1.Columns[4].HeaderCell.Value = "Количество шт." ; this .dataGridView1.Columns[4].Width = 110; bs.DataSource = table; this .bindingNavigator1.BindingSource = bs; return ; } Добавьте метод создания таблицы «DataTable» по схеме базы данных: /// /// Метод создает новую таблицу DataTable по схеме SqlDataReader /// /// reader "> Данные из DataReader /// tableName "> Имя новой таблицы DataTable /// Возвращает таблицу DataTable, составленную по схеме DataReader private static DataTable CreateSchemaFromReader(SqlDataReader reader, string tableName) { DataTable table = new DataTable(tableName); for ( int i = 0; i < reader.FieldCount; i++) table.Columns.Add( new DataColumn(reader.GetName(i), reader.GetFieldType(i))); table.Columns.Add( "AmountOf" , typeof ( int )); return table; } Добавьте метод записи данных в таблицу «DataTable» из базы данных: /// /// Метод записывает данные в таблицу DataTable из схемы DataReader /// /// table "> Таблица DataTable куда будут записаны данные /// reader "> Данные из DataReader private static void WriteDataFromReader(DataTable table, SqlDataReader reader) { while (reader.Read()) { DataRow row = table.NewRow(); for ( int i = 0; i < reader.FieldCount; i++) row[i] = reader[i]; table.Rows.Add(row); } } private static void WriteDataFromReader(DataTable table, SqlDataReader reader, int amount) { while (reader.Read()) { DataRow row = table.NewRow(); 246 for ( int i = 0; i < reader.FieldCount; i++) row[i] = reader[i]; row[reader.FieldCount] = amount; table.Rows.Add(row); } } Добавьте ручной обработчик события «bindingNavigatorDeleteItem_Click» для элемента «BindingNavigator»: private void bindingNavigatorDeleteItem_Click( object sender, EventArgs e) { if ( this .dataGridView1.Rows.Count > 0) if (MessageBox.Show( this , "Эта книга будет удалена из заказа" , "Вы уверены, что хотите продолжить?" , MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) { int temp = Convert.ToInt32( this .dataGridView1.CurrentRow.Cells[4].Value); main.bucketGoods.Remove(Convert.ToInt32( this .dataGridView1.CurrentRow.Cells[0].Value)); main.amountGoods -= temp; bs.RemoveCurrent(); this .label2.Text = main.amountGoods.ToString() + " шт." ; this .label4.Text = CalcTotalPrice().ToString(); main.UpdateFormChanges(); } } Добавьте обработчик события на закрытие формы: private void FrmPurchases_FormClosing( object sender, FormClosingEventArgs e) { main.UpdateFormChanges(); } Добавьте обработчик события «Click» для кнопки «Оформить заказ»: private void button2_Click( object sender, EventArgs e) { if (flagHeight) this .Width -= 540; else this .Width += 540; flagHeight = !flagHeight; } Добавьте обработчик события «Click» для кнопки «Подтвердить»: private void button1_Click( object sender, EventArgs e) { DataTable dt = new DataTable(); dt = (DataTable)dataGridView1.DataSource; WriteToOrderItemList(); } 15.27 Добавление обработчиков событий для формы «Информация о заказах» В обозревателе решений перейдите к форме Добавьте обработчик события на загрузку формы: 247 int ? OrderListID = 0; private void FrmViewOrdersInfo_Load( object sender, EventArgs e) { this .ordersTableAdapter.Fill( this .dataSet1.Orders); OrderListID = Convert.ToInt32( this .dataGridView1.CurrentRow.Cells[0].Value); this .spListOfOrdersTableAdapter.Fill( this .dataSet1.spListOfOrders, ref OrderListID); } Добавьте обработчик события «SelectionChanged» для элемента «dataGridView1»: private void dataGridView1_SelectionChanged( object sender, EventArgs e) { OrderListID = Convert.ToInt32( this .dataGridView1.CurrentRow.Cells[0].Value); this .spListOfOrdersTableAdapter.Fill( this .dataSet1.spListOfOrders, ref OrderListID); } 15.28 Контрольное задание Создайте приложение-клиент к базе данных согласно выбранному вами варианту. В приложении должно быть реализовано: − отображение таблиц; − манипулирование данными; − поиск, сортировка, фильтрация данных; − не менее 3-х запросов; − не менее 3-х хранимых процедур (для проведения затратного анализа). 15.29 Контрольные вопросы 1. Как организовать отображение данных из таблиц? 2. С помощью какого компонента осуществляется манипулирование данными? 3. При помощи какого метода осуществляется сортировка данных? 4. С помощью какого метода осуществляется поиск данных? 5. При помощи какого метода осуществляется фильтрация данных? 6. Каким образом организуется осуществление выполнения запросов? 7. Как организовать осуществление выполнения хранимых процедур? 248 Список использованных источников |