Методические рекомендации по выполнению практических работ по междисциплинарному курсу
Скачать 2.6 Mb.
|
Навигация o NewCustomer o FillOrCancel 3. Для каждой формы добавьте текстовые поля, кнопки и другие элементы управления, которые отображаются на рисунках ниже. Для каждого элемента управления задайте свойства, указанные в таблицах. Примечание Элементы управления "группа" и "надпись" обеспечивают большую ясность, но не используются в коде. Форма навигации С О З Д А Н И Е Ф О Р М И Д О Б А В Л Е Н И Е Э Л Е М Е Н Т О В У П Р А В Л Е Н И Я Элементы управления формы навигации Свойства Кнопка Name = btnGoToAdd Кнопка Name = btnGoToFillOrCancel Кнопка Name = btnExit Форма NewCustomer С О З Д А Н И Е Ф О Р М И Д О Б А В Л Е Н И Е Э Л Е М Е Н Т О В У П Р А В Л Е Н И Я Элементы управления формы NewCustomer Свойства TextBox Name = txtCustomerName TextBox Name = txtCustomerID Readonly = True Кнопка Name = btnCreateAccount NumericUpDown DecimalPlaces = 0 Maximum = 5000 Name = numOrderAmount DateTimePicker Format = Short Name = dtpOrderDate Кнопка Name = btnPlaceOrder Кнопка Name = btnAddAnotherAccount Кнопка Name = btnAddFinish Форма FillOrCancel Т А Б Л И Ц А 3 Элементы управления формы FillOrCancel Свойства TextBox Name = txtOrderID Кнопка Name = btnFindByOrderID DateTimePicker Format = Short Name = dtpFillDate DataGridView Name = dgvCustomerOrders Readonly = True RowHeadersVisible = False Кнопка Name = btnCancelOrder Кнопка Name = btnFillOrder Кнопка Name = btnFinishUpdates Сохранение строки подключения Когда приложение пытается открыть подключение к базе данных, оно должно иметь доступ к строке подключения. Чтобы не вводить строку вручную в каждой форме, сохраните строку в файле App.config в проекте и создайте метод, возвращающий строку при вызове метода из любой формы в приложении. Строку подключения можно найти, щелкнув правой кнопкой мыши подключение данных о продажах в Обозреватель сервера и выбрав Свойства. Найдите свойство ConnectionString , а затем с помощью клавиш CTRL + A, CTRL + C выберите и скопируйте строку в буфер обмена. 1. Если вы используете C#, в Обозреватель решений разверните узел свойства в проекте, а затем откройте файл Settings. Settings . Если вы используете Visual Basic, в Обозреватель решений выберите пункт Показывать все файлы, разверните узел Мой проект , а затем откройте файл Settings. Settings . 2. В столбце имя введите connString . 3. В списке тип выберите (строка подключения). 4. В списке область выберите приложение. 5. В столбце значение введите строку подключения (без кавычек), а затем сохраните изменения. Примечание В реальных приложениях строку подключения следует хранить безопасно, как описано в разделе строки подключения и файлы конфигурации. Написание кода для форм Этот раздел содержит краткие обзоры того, что делает каждая форма. Он также предоставляет код, определяющий базовую логику при нажатии кнопки на форме. Форма навигации Форма навигации открывается при запуске приложения. Кнопка Добавить учетную запись открывает форму NewCustomer. Кнопка Выполнение или отмена заказов открывает форму FillOrCancel. Кнопка Выход закрывает приложение. Преобразование формы навигации в начальную форму При использовании C# в обозревателе решений откройте файл Program.cs и измените строку Application.Run на следующую: Application.Run(new Navigation()); Если вы используете Visual Basic, в Обозреватель решений откройте окно свойства , перейдите на вкладку приложение и выберите симпледатаапп. Navigation в списке начальных форм . Создание автоматически создаваемых обработчиков событий Дважды щелкните три кнопки в форме навигации, чтобы создать пустые методы обработчика событий. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события. Добавление кода для логики формы навигации На странице кода для формы навигации заполните основные тексты методов для трех обработчиков событий нажатия кнопки, как показано в следующем коде. C#Копировать /// /// Opens the NewCustomer form as a dialog box, /// which returns focus to the calling form when it is closed. /// { Form frm = new NewCustomer(); frm.Show(); } /// /// Opens the FillorCancel form as a dialog box. /// { Form frm = new FillOrCancel(); frm.ShowDialog(); } /// /// Closes the application (not just the Navigation form). /// { this.Close(); } Форма NewCustomer Если ввести имя клиента, а затем нажать кнопку создать учетную запись , форма newCustomer создает учетную запись клиента, а SQL Server ВОЗВРАЩАЕТ значение идентификатора в качестве нового идентификатора клиента. Затем можно разместить заказ для новой учетной записи, указав сумму и дату заказа и нажав кнопку поместить порядок . Создание автоматически создаваемых обработчиков событий Создайте пустой обработчик событий щелчка для каждой кнопки в форме NewCustomer, дважды щелкнув каждую из четырех кнопок. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события. Добавление кода для логики формы NewCustomer Чтобы завершить логику формы NewCustomer, выполните следующие действия. 1. Перенесите System.Data.SqlClient пространство имен в область, чтобы не указывать полные имена его членов. C#Копировать using System.Data.SqlClient; 2. Добавьте в класс некоторые переменные и вспомогательные методы, как показано в следующем коде. C#Копировать // Storage for IDENTITY values returned from database. private int parsedCustomerID; private int orderID; /// /// Verifies that the customer name text box is not empty. /// { if (txtCustomerName.Text == "") { MessageBox.Show("Please enter a name."); return false; } else { return true; } } /// /// Verifies that a customer ID and order amount have been provided. /// { // Verify that CustomerID is present. if (txtCustomerID.Text == "") { MessageBox.Show("Please create customer account before placing order."); return false; } // Verify that Amount isn't 0. else if ((numOrderAmount.Value < 1)) { MessageBox.Show("Please specify an order amount."); return false; } else { // Order can be submitted. return true; } } /// /// Clears the form data. /// { txtCustomerName.Clear(); txtCustomerID.Clear(); dtpOrderDate.Value = DateTime.Now; numOrderAmount.Value = 0; this.parsedCustomerID = 0; } 3. Заполните основные тексты методов для четырех обработчиков событий нажатия кнопки, как показано в следующем коде. C#Копировать /// /// Creates a new customer by calling the Sales.uspNewCustomer stored procedure. /// { if (IsCustomerNameValid()) { // Create the connection. using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString)) { // Create a SqlCommand, and identify it as a stored procedure. using (SqlCommand sqlCommand = new SqlCommand("Sales.uspNewCustomer", connection)) { sqlCommand.CommandType = CommandType.StoredProcedure; // Add input parameter for the stored procedure and specify what to use as its value. sqlCommand.Parameters.Add(new SqlParameter("@CustomerName", SqlDbType.NVarChar, 40)); sqlCommand.Parameters["@CustomerName"].Value = txtCustomerName.Text; // Add the output parameter. sqlCommand.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int)); sqlCommand.Parameters["@CustomerID"].Direction = ParameterDirection.Output; try { connection.Open(); // Run the stored procedure. sqlCommand.ExecuteNonQuery(); // Customer ID is an IDENTITY value from the database. this.parsedCustomerID = (int)sqlCommand.Parameters["@CustomerID"].Value; // Put the Customer ID value into the read-only text box. this.txtCustomerID.Text = Convert.ToString(parsedCustomerID); } catch { MessageBox.Show("Customer ID was not returned. Account could not be created."); } finally { connection.Close(); } } } } } /// /// Calls the Sales.uspPlaceNewOrder stored procedure to place an order. /// { // Ensure the required input is present. if (IsOrderDataValid()) { // Create the connection. using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString)) { // Create SqlCommand and identify it as a stored procedure. using (SqlCommand sqlCommand = new SqlCommand("Sales.uspPlaceNewOrder", connection)) { sqlCommand.CommandType = CommandType.StoredProcedure; // Add the @CustomerID input parameter, which was obtained from uspNewCustomer. sqlCommand.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int)); sqlCommand.Parameters["@CustomerID"].Value = this.parsedCustomerID; // Add the @OrderDate input parameter. sqlCommand.Parameters.Add(new SqlParameter("@OrderDate", SqlDbType.DateTime, 8)); sqlCommand.Parameters["@OrderDate"].Value = dtpOrderDate.Value; // Add the @Amount order amount input parameter. sqlCommand.Parameters.Add(new SqlParameter("@Amount", SqlDbType.Int)); sqlCommand.Parameters["@Amount"].Value = numOrderAmount.Value; // Add the @Status order status input parameter. // For a new order, the status is always O (open). sqlCommand.Parameters.Add(new SqlParameter("@Status", SqlDbType.Char, 1)); sqlCommand.Parameters["@Status"].Value = "O"; // Add the return value for the stored procedure, which is the order ID. sqlCommand.Parameters.Add(new SqlParameter("@RC", SqlDbType.Int)); sqlCommand.Parameters["@RC"].Direction = ParameterDirection.ReturnValue; try { //Open connection. connection.Open(); // Run the stored procedure. sqlCommand.ExecuteNonQuery(); // Display the order number. this.orderID = (int)sqlCommand.Parameters["@RC"].Value; MessageBox.Show("Order number " + this.orderID + " has been submitted."); } catch { MessageBox.Show("Order could not be placed."); } finally { connection.Close(); } } } } } /// /// Clears the form data so another new account can be created. /// { this.ClearForm(); } /// /// Closes the form/dialog box. /// private void btnAddFinish_Click(object sender, EventArgs e) { this.Close(); } Форма FillOrCancel Форма Филлорканцел запускает запрос для возврата заказа при вводе идентификатора заказа и нажатия кнопки найти заказ . Возвращенная строка отображается в сетке данных только для чтения. Можно пометить заказ как отмененный (X), если нажать кнопку отменить заказ или пометить заказ как заполненный (F), если нажать кнопку заполнить заказ . Если нажать кнопку найти порядок еще раз, появится обновленная строка. Создание автоматически создаваемых обработчиков событий Создайте пустые обработчики событий щелчка для четырех кнопок в форме Филлорканцел, дважды щелкнув кнопки. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события. Добавление кода для логики формы Филлорканцел Чтобы завершить логику формы Филлорканцел, выполните следующие действия. 1. Перенесите следующие два пространства имен в область, чтобы не указывать полные имена их членов. C#Копировать using System.Data.SqlClient; using System.Text.RegularExpressions; 2. Добавьте в класс переменную и вспомогательный метод, как показано в следующем коде. C#Копировать // Storage for the order ID value. private int parsedOrderID; /// /// Verifies that an order ID is present and contains valid characters. /// { // Check for input in the Order ID text box. if (txtOrderID.Text == "") { MessageBox.Show("Please specify the Order ID."); return false; } // Check for characters other than integers. else if (Regex.IsMatch(txtOrderID.Text, @"^\D*$")) { // Show message and clear input. MessageBox.Show("Customer ID must contain only numbers."); txtOrderID.Clear(); return false; } else { // Convert the text in the text box to an integer to send to the database. parsedOrderID = Int32.Parse(txtOrderID.Text); return true; } } 3. Заполните основные тексты методов для четырех обработчиков событий нажатия кнопки, как показано в следующем коде. C#Копировать /// /// Executes a t-SQL SELECT statement to obtain order data for a specified /// order ID, then displays it in the DataGridView on the form. /// { if (IsOrderIDValid()) { using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString)) { // Define a t-SQL query string that has a parameter for orderID. const string sql = "SELECT * FROM Sales.Orders WHERE orderID = @orderID"; // Create a SqlCommand object. using (SqlCommand sqlCommand = new SqlCommand(sql, connection)) { // Define the @orderID parameter and set its value. sqlCommand.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int)); sqlCommand.Parameters["@orderID"].Value = parsedOrderID; try { connection.Open(); // Run the query by calling ExecuteReader(). using (SqlDataReader dataReader = sqlCommand.ExecuteReader()) { // Create a data table to hold the retrieved data. DataTable dataTable = new DataTable(); // Load the data from SqlDataReader into the data table. dataTable.Load(dataReader); // Display the data from the data table in the data grid view. this.dgvCustomerOrders.DataSource = dataTable; // Close the SqlDataReader. dataReader.Close(); } } catch { MessageBox.Show("The requested order could not be loaded into the form."); } finally { // Close the connection. connection.Close(); } } } } } /// /// Cancels an order by calling the Sales.uspCancelOrder /// stored procedure on the database. /// { if (IsOrderIDValid()) { // Create the connection. using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString)) { // Create the SqlCommand object and identify it as a stored procedure. using (SqlCommand sqlCommand = new SqlCommand("Sales.uspCancelOrder", connection)) { sqlCommand.CommandType = CommandType.StoredProcedure; // Add the order ID input parameter for the stored procedure. sqlCommand.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int)); sqlCommand.Parameters["@orderID"].Value = parsedOrderID; try { // Open the connection. connection.Open(); // Run the command to execute the stored procedure. sqlCommand.ExecuteNonQuery(); } catch { MessageBox.Show("The cancel operation was not completed."); } finally { // Close connection. connection.Close(); } } } } } /// /// Fills an order by calling the Sales.uspFillOrder stored /// procedure on the database. /// { if (IsOrderIDValid()) { // Create the connection. using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString)) { // Create command and identify it as a stored procedure. using (SqlCommand sqlCommand = new SqlCommand("Sales.uspFillOrder", connection)) { sqlCommand.CommandType = CommandType.StoredProcedure; // Add the order ID input parameter for the stored procedure. sqlCommand.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int)); sqlCommand.Parameters["@orderID"].Value = parsedOrderID; // Add the filled date input parameter for the stored procedure. sqlCommand.Parameters.Add(new SqlParameter("@FilledDate", SqlDbType.DateTime, 8)); sqlCommand.Parameters["@FilledDate"].Value = dtpFillDate.Value; try { connection.Open(); // Execute the stored procedure. sqlCommand.ExecuteNonQuery(); } catch { MessageBox.Show("The fill operation was not completed."); } finally { // Close the connection. connection.Close(); } } } } } /// /// Closes the form. /// private void btnFinishUpdates_Click(object sender, EventArgs e) { this.Close(); } |