Aplikacje lokalne w .Net - ćwiczenia
Zadanie 1 - prosty DataGrid
Otwórz SQL Server Management Studio i uruchom skrypt DemobldMSSQL.sql w swojej bazie danych.
Uruchom Visual Studio 2005 i utwórz nowy projekt (Visual Basic / Windows Application).
Używając Management Studio utwórz procedurę składowaną (stored procedure) zwracającą dane z tabeli Emp, np.:
CREATE PROCEDURE emp_sel AS
BEGIN
SELECT empno, ename, sal, deptno FROM emp ORDER BY ename
END
Dodaj do projektu DataSet i umieść w nim TableAdapter. W kreatorze wybierz New Connection i określ parametry połączenia z serwerem SQL. Użyj opcji Use existing stored procedures i wskaż utworzoną procedurę.
Umieść na formularzu DataGridView i wskaż jako źródło danych tabelę z utworzonego przed chwilą DataSet.
Przejdź do kodu formularza. Sprawdź, czy została dodana w Form_load linia kodu typu:
Me.EMPTableAdapter.Fill(Me.EMPDataSet1.Emp)
Przetestuj aplikację.
Napisz procedury składowane wykonujące pozostałe 3 operacje na tabeli Emp (INSERT, UPDATE, DELETE), np.:
CREATE PROCEDURE emp_ins
@empno INT,
@ename VARCHAR(10),
@sal INT,
@deptno INT
AS BEGIN
INSERT INTO emp (empno, ename, sal, deptno)
VALUES (@empno, @ename, @sal, @deptno)
END
Otwórz DataSet, wybierz opcję Configure i podaj nazwy utworzonych procedur. Sprawdź i ewentualnie skoryguj mapowanie parametrów na kolumny tabeli.
Dodaj przycisk (button) zapisujący zmiany dokonane w DataGridView. Do kodu procedury Nazwa_przycisku_Click dodaj linię typu:
Me.EMPTableAdapter.Update(Me.EMPDataSet1.Emp)
Uruchom aplikację, wykonaj kilka modyfikacji danych w tabeli. Sprawdź przy pomocy Management Studio, czy zmiany zostały wprowadzone.
Napisz procedurę zwracającą działy z tabeli Dept. Użyjemy jej, aby edytując dane poprzez DataGridView, możliwy był wybór działu z listy. Procedura powinna zwracać numer działu (deptno) oraz nazwę (dname).
Utwórz nowy TableAdapter na bazie napisanej przed chwilą procedury.
Wejdź do okna edycji kolumn DataGridView i zmień typ kolumny z numerem działu na ComboBox. Wskaż jako źródło danych utworzony przed chwilą TableAdapter. Nie zapomnij ustawić właściwości DisplayMember (wybierz dname) oraz ValueMember (wybierz deptno). Sprawdź, czy została dodana do zdarzenia Form_load linia kodu podobna do tej z punktu 6. Przetestuj aplikację.
Zadanie 2 - połączenie z bazą danych z poziomu kodu VB
Utwórz nowy formularz. Umieść na nim pola tekstowe, w które użytkownik będzie wprowadzał wartości empno, ename, sal. Dodaj ComboBox umożliwiający wybór działu i powiąż go z danymi analogicznie do zadania 1.
Dodaj przycisk zapisujący dane (dodający nowy rekord). Przykład kodu wywołującego procedurę składowaną na serwerze SQL:
Imports System.Data.SqlClient
Public Class frmEmpDept
Private con As SqlConnection
Private Sub frmEmpDept_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
con = New SqlConnection()
con.ConnectionString = My.MySettings.Default.EmpDeptConnectionString
con.Open()
End Sub
Private Sub btnZapisz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZapisz.Click
Dim cmd As SqlCommand
cmd = New SqlCommand()
cmd.CommandTimeout = 60
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "emp_ins"
cmd.Connection = con
cmd.Parameters.Add("@ename”, SqlDbType.VarChar)
cmd.Parameters.Item("@ename").Value = txtNazwa.Text
cmd.Parameters.Add("@deptno", SqlDbType.Int)
cmd.Parameters.Item("@deptno").Value = cmbPanstwo.SelectedValue
Try
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox("Wystąpił błąd!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Błąd!")
End Try
con.Close()
End Sub
Przetestuj aplikację wprowadzając dane i sprawdzając wynik w Management Studio.
Zadanie 3 - DataReader
Utwórz nowy formularz z jednym przyciskiem. Przycisk będzie wywoływał kod odczytujący po kolei rekordy zwrócone przez procedurę składowaną wykonującą instrukcję SELECT (zadanie 1, punkt 3). Skopiuj kod z zadania 2 zmieniając linię:
cmd.ExecuteNonQuery()
na:
dim dr As SqlDataReader
dr = cmd.ExecuteReader(CommandBehavior.Default)
Do While dr.Read()
MsgBox(dr(„ename”))
Loop
Przetestuj działanie formularza.
Zadanie 4 - Tworzenie interfejsu MDI
Dodaj do swojego projektu MDI Parent Form. Usuń automatycznie wygenerowany kod.
Zmień menu rozwijane tak, aby znalazły się w nim wyłącznie pozycje otwierające utworzone dotychczas formularze. Przykładowy kod:
frmZad1.MdiParent = Me
frmZad1.Show()
Na formularzu z zadania 1 ustaw właściwości kontrolek Dock i Anchor tak, aby ekran wyglądał poprawnie niezależnie od rozmiaru oraz maksymalizacji.
Zadanie 5 - Formularz z podformularzem przy użyciu DataGrid
Napisz nową procedurę składowaną, która będzie zwracała pracowników danego działu z tabeli Emp. Procedura powinna posiadać parametr @deptno.
Utwórz TableAdapter dla napisanej przed chwilą procedury. Sprawdź, czy posiadasz procedurę i TableAdapter wybierające dane z tabeli Dept i w razie potrzeby utwórz je.
Utwórz nowy formularz i umieść na nim dwie kontrolki DataGridView. Pierwsza z nich będzie wyświetlała działy, a druga pracowników z wybranego działu. Ustaw odpowiednie źródła danych.
Ustaw właściwość SelectionMode na FullRowSelect dla pierwszego DataGridView (tego z działami).
Doprowadź do sytuacji, w której metoda Fill dla tabeli z działami będzie uruchamiana w zdarzeniu Form_load, a dla tabeli z pracownikami, przy zdarzeniu SelectionChanged kontrolki DataGridView z działami. Metoda Fill będzie posiadać dodatkowy parametr deptno. na który trzeba przypisać wybrany dział. Przykład:
Me.Emp_selTableAdapter.Fill(Me.DataSet1.emp_sel, grdDept.SelectedRows(0).Cells("DeptnoDataGridViewTextBoxColumn").Value)
Zadanie 6 - Ekran oparty na drzewku TreeView
Utwórz nowy formularz i umieść na nim SplitContainer, czyli kontrolkę dzielącą ekran na dwie części.
Na lewym panelu umieść kontrolkę TreeView, a na prawym DataGridView. Ustaw właściwość Dock obu kontrolek na Fill.
Do drzewka dodaj „korzeń” wybierając opcję EditNodes oraz edytując właściwości Name (ustaw „D”) i Text (wprowadź „Działy”).
Do Form_load formularza dodaj kod pobierający kolejne działy i wstawiający pozycje do drzewa, np:
dr = cmd.ExecuteReader(CommandBehavior.Default)
Do While dr.Read()
trvDept.Nodes(„D”).Nodes.Add(dr(„deptno”), dr(„dname”))
Loop
Oczywiście wcześniej należy ustanowić połączenie i wywołać procedurę w sposób analogiczny do zadania 2.
Wskaż jako źródło danych dla DataGridView TableAdapter oparty na procedurze wybierającej pracowników danego działu (zadanie 5, punkty 1 i 2).
Oprogramuj zdarzenie AfterSelect drzewa. Umieść tam wywołanie metody Fill z wartością parametru deptno pobraną z drzewa, np.:
If trvDept.SelectedNode.Name <> „D” Then
Me.Emp_selTableAdapter.Fill(Me.DataSet1.emp_sel, trvDept.SelectedNode.Name)
End If
Zadanie 7 - Tworzenie w pełni funkcjonalnego ekranu do edycji danych
Utwórz formularz umożliwiający wykonywanie dodawania, edycji i usuwania rekordów według poniższego wzoru: