cs 3870/cs 5870: note05
DESCRIPTION
CS 3870/CS 5870: Note05. Lab 3 Web Application with Dataase. Master Page. All Web pages will be similar Should be created before other web pages Add New Items Controls on the Master page ContentPlaceHolder Leave ContentPlaceHolder empty - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/1.jpg)
1
CS 3870/CS 5870: Note05
Prog3
Web Application with Database
![Page 2: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/2.jpg)
2
Master Page
• All Web pages will be similar
• Should be created before other web pages
• Add New Items
• Master Page
• Name: Prog3MasterPage.master
• Check “Place code in separate file”
• Uncheck “Select master page”– Could create a master page based on another master page
• May be incomplete and need to come back later
![Page 3: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/3.jpg)
3
Elements on the Master page
• External CSS file<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
• Form– All controls should be inside Form for dynamic pages
• Two ContentPlaceHolder controls: could change id
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
<asp:ContentPlaceHolder id="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
![Page 4: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/4.jpg)
4
Elements on the Master page
• Leave ContentPlaceHolder empty
• Add all common elements before/after ContentPlaceHolder– Title and Names
– Adding navbar: incomplete
![Page 5: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/5.jpg)
Content Pages• Create the three pages using the master page
– Add New Item
– Web Form
– Place code in separate file
– Select master page
– Add
– Select folder
– Select Master page
• The second web form
– Add
– Web Form (with master)5
![Page 6: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/6.jpg)
Content Pages• No Form control on content pages
– The form control on the master page will be combined with the controls on the content page
• Two Content controls
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Prog3Body" Runat="Server">
</asp:Content>
• Type it if not there6
![Page 7: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/7.jpg)
7
Complete the Navbar on Master Page
<ul class="navbar">
<li> <a href="Default.aspx"> All Products </a></li>
<li> <a href="Updating.aspx"> Updating Products </a></li>
<li> <a href="Shopping.aspx"> Shopping </a></li>
</ul>
Type and select the pages.
![Page 8: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/8.jpg)
8
Adding Elements
• Type “All Products”, “Updating” and “Shopping” on the three pages
• Run IE to see the pages
![Page 9: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/9.jpg)
9
The Database
• UWPCS3870
• SQL Server on Alpha
• User: MSCS
(not case sensitive)
• Password: MasterInCS
(case sensitive)
![Page 10: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/10.jpg)
Table Product
Four Columns
ProductID : nchar(4), primary key,
not updatable
ProductNmae: nvarchar(50)
UnitPrice : smallmoney
Description : nvarchar(MAX), allow nulls
10
![Page 11: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/11.jpg)
11
Accessing Database
• Data Source Controls– SqlDataSource
– AccessDataSource
– . . .
• Code class– Connection
– Command
– DataAdpater
– AdapterBuilder
• Prog3– Use Code class
![Page 12: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/12.jpg)
ASP.NET Folders
• Solution Explorer
• Right click Web site
• Add ASP.NET Folder
• App_Code
• (App_Data)
• . . .
12
![Page 13: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/13.jpg)
SQLDataClass
• Code class in folder App_Code
• No code module
• All variables and procedures should be
Shared (Static in C#, Java and C++)
• Otherwise, need to create object
13
![Page 14: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/14.jpg)
Variables
Public Class SQLDataClass
Private Const ConStr As String = "Data Source=Alpha;” &
“Initial Catalog=UWPCS3870;Persist Security Info=True;” &
“User ID=MSCS;Password=MasterInCS"
Private Shared prodAdapter As System.Data.SqlClient.SqlDataAdapter
Private Shared prodBuilder As System.Data.SqlClient.SqlDataAdapter
Private Shared prodCmd As New Data.SqlClient.SqlCommand
Private Shared con As New Data.SqlClient.SqlConnection
Public Shared tblProduct As New Data.DataTable("Product")
. . .
End Class
The objects are available all the times.
14
![Page 15: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/15.jpg)
Setup Command and Adapter
‘ Sets up the connection, command and adapter
Public Shared Sub setupProdAdapter()
con.ConnectionString = ConStr
prodCmd.Connection = con
prodCmd.CommandType = Data.CommandType.Text
prodCmd.CommandText = "Select * from Product order by ProductID"
prodAdapter = New System.Data.SqlClient.SqlDataAdapter(prodCmd)
prodAdapter.FillSchema(tblProduct, Data.SchemaType.Source)
End Sub
15
![Page 16: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/16.jpg)
Retrieve Data Records‘ Gets the table records and the table schema
Public Shared Sub getAllProducts()
‘ Need to reset the command
prodCmd.CommandText = "Select * from Product order by ProductID"
Try
If Not tblProduct Is Nothing Then
tblProduct.Clear()
End If
prodAdapter.Fill(tblProduct)
Catch ex As Exception
Throw ex
Finally
con.Close()
End Try
End Sub 16
![Page 17: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/17.jpg)
Setting up the Adapter
‘ Global.asax
Sub Application_Start(. . .)
SQLDataClass.setupProdAdapter()
End Sub
Do it just once for the application for all sessions of all users.
17
![Page 18: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/18.jpg)
Setting up the AdapterPublic Shared Sub getAllProdcts()
If prodAdapter Is Nothing Then
setupProdAdapter()
End If
prodCmd.CommandText = "Select * from Product order by ProductID"
Try
. . .
End Try
End Sub
18
![Page 19: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/19.jpg)
Binding Gridview
‘ Add a GridView on page Default.aspx
‘ GridView: ToolBox – Data
Protected Sub Page_Load(. . .) Handles Me.Load
SQLDataClass.getAllProducts()
GridView1.DataSource = SQLDataClass.tblProduct
GridView1.DataBind()
End Sub
Refill the data table for each page request.
19
![Page 20: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/20.jpg)
Formatting GridView<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="False"
style="z-index: 1; position: relative; width: 50%; margin-left:25%;
align-items: center; height: 176px" >
<Columns>
<asp:BoundField DataField="ProductID" HeaderText="Product ID" >
<ItemStyle HorizontalAlign="Center" Width="10%"></ItemStyle></asp:BoundField>
<asp:BoundField DataField="ProductName" HeaderText="Product Name" >
<ItemStyle HorizontalAlign="Left" Width="20%"></ItemStyle></asp:BoundField>
<asp:BoundField DataField="UnitPrice" HeaderText="Unit Price"
DataFormatString="{0:c}" HtmlEncode="False" >
<ItemStyle HorizontalAlign="Right" Width="10%"></ItemStyle></asp:BoundField>
<asp:BoundField DataField="Description" HeaderText="Description">
<ItemStyle HorizontalAlign="right" Width="10%"></ItemStyle></asp:BoundField>
</Columns>
</asp:GridView>
20
![Page 21: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/21.jpg)
Page Updating
• Display record one at a time
• Display the first record for the first visit
• Display the same record for return visit
• Need Session variable
• Begin with “Prog3_”
21
![Page 22: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/22.jpg)
Session Variables
Sub Session_Start(. . .)
Session(“Prog3_Index”) = 0
End Sub
Protected Sub Page_Load(…) Handles Me.Load
DisplayRow(Session("Prog3_Index"))
End Sub
22
![Page 23: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/23.jpg)
Display RecordProtected Sub Page_Load(…) Handles Me.Load
DisplayRow(Session(“Prog3_Index”))
End Sub
Private Sub DisplayRow(Index As Integer)
Dim row As Data.DataRow
row = SQLDataClass.tblProduct.Rows(index)
‘ May need formatting
txtID.Text = row(0)
txtName.Text = row(1)
txtPrice.Text = row(2)
txtDescription.Text = row(3)
End Sub
23
![Page 24: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/24.jpg)
Navigation Buttons
Partial Class Prog3_Updating
Protected Sub Button6_Click(…) Handles btnNext.Click
Session(“Prog3_Index”) += 1
DisplayRow(Session(“Prog3_Index”))
End Sub
Protected Sub Button6_Click(…) Handles btnPrevious.Click
Session(“Prog3_Index”) -= 1
DisplayRow(Session(“Prog3_Index”))
End Sub
24
![Page 25: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/25.jpg)
Enable/Disable Buttons
Could make a private Sub.
Your choice.
25
![Page 26: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/26.jpg)
Navigation Buttons
Partial Class Prog3_Updating
Protected Sub Button6_Click(…) Handles btnNext.Click
Session(“Prog3_Index”) += 1
DisplayRow(Session(“Prog3_Index”))
EnableDisableButtons()
End Sub
Protected Sub Button6_Click(…) Handles btnPrevious.Click
Session(“Prog3_Index”) -= 1
DisplayRow(Session(“Prog3_Index”))
EnableDisableButtons()
End Sub
26
![Page 27: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/27.jpg)
Enable/Disable Buttons
Sub EnableDisableButtons()
if Session(“Prog3_Index”) = 0 Then
ElseIf Session(“Prog3_Index") =
SQLDataClass.tblProduct.Rows.Count - 1 Then
Else
End If
End Sub
27
![Page 28: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/28.jpg)
SQL Statements
Update Product
Set ProductName = ‘NewName’,
UnitPrice = newPrice
Description = ‘NewDescription’,
Where ProductID = ‘theID’;
Insert Into Product
Values(‘ID’, ‘Name’, Price, ‘Description’);
Delete From Product
Where ProductID = ‘theID’;
28
![Page 29: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/29.jpg)
Button Update
‘ Page Updating.Aspx
‘ID not to be modified
Protected Sub Button6_Click(…) Handles btnUpdate.Click
‘Dim theID As String = txtID.Text
Dim oldID As String =
SQLDataClass.tblProduct.Rows(Session(“Prog3_Index"))(0)
Dim newName As String = txtName.Text
Dim newPrice As Double = txtPrice.Text
Dim newDesc As String = txtDesc.Text
SQLDataClass.UpdateProduct(theID, newName,
newPrice, newDesc)
End Sub
29
![Page 30: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/30.jpg)
UpdateProduct
‘ SQLDataClass
Public Shared Sub UpdateProduct(theID As String,
newName As String, newPrice As Double, newDesc As String)
‘ Building SQL statement with variables
prodCmd.CommandText = ". . ."
Try
con.Open()
prodCmd.ExecuteNonQuery()
Catch ex
Throw ex
Finally
con.Close()
End Try
End Sub 30
![Page 31: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/31.jpg)
UpdateProduct
‘ SQLDataClass
Public Shared Sub UpdateProduct(theID As String,
newName As String, newPrice As Double, newDesc As String)
prodCmd.CommandText =
" Update Product" & _
" Set ProductName = ‘newName', " & _
" UnitPrice = newPrice, " & _
" Description = ‘newDesc'" & _
" Where ProductID = 'theID‘”
Try
. . .
End Try
End Sub
Incorrect! 31
![Page 32: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/32.jpg)
UpdateProduct
‘ SQLDataClass
Public Shared Sub UpdateProduct(theID As String,
newName As String, newPrice As Double)
‘ Building SQL statement with variables
prodCmd.CommandText =
" Update Product " & _
" Set ProductName = " & newName & “, " & _
" UnitPrice = " & newPrice & ", " & _
" Description = " & newDesc & _
" Where ProductID = " & theID
Try
. . .
End Try
End Sub
Incorrect! 32
![Page 33: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/33.jpg)
UpdateProduct
‘ SQLDataClass
Public Shared Sub UpdateProduct(theID As String,
newName As String, newPrice As Double)
‘ Building SQL statement with variables
prodCmd.CommandText =
" Update Product " & _
" Set ProductName = '" & newName & "'," & _
" UnitPrice = " & newPrice & ", " & _
" Description = '" & newDesc & "'" & _
" Where ProductID = '" & theID & "'“
Try
. . .
End Try
End Sub
Correct! 33
![Page 34: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/34.jpg)
Try-Catch-FinallyPublic Shared Sub UpdateProduct(oldID As String,
newID As String, newName As String, newPrice As Double)
prodCmd.CommandText = ". . ."
Try
con.Open()
prodCmd.ExecuteNonQuery() ‘ update database
Catch ex
Throw new Exception(ex.Message & “ ” &
prodCmd.CommandText)
Finally
con.Close() ‘ always close it
End Try
End Sub
34
![Page 35: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/35.jpg)
Button Update
‘ Page Updating.Aspx
Protected Sub Button6_Click(…) Handles btnUpdate.Click
Dim . . .
Try
DataClass.UpdateProduct(theID, newName,
newPrice, newDesc)
txtMsg.Text = "Record updated“
‘ must update tblProducts
SQLDataClass.getAllProduct()
Catch ex
txtMsg.Text = ex.Message ‘including myCmd.CommandText
End Try
End Sub 35
![Page 36: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/36.jpg)
36
Updating
‘ Page Updating.Aspx
Partial Class Prog3_Updating
Inherits System.Web.UI.Page
Protected Sub Page_Load(. . .) Handles Me.Load
txtMsg.Text = ""
DisplayRow(Session(“Prog3_Index"))
End Sub
Cannot Update Correctly!
![Page 37: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/37.jpg)
37
Updating
Partial Class Prog3_Updating
Inherits System.Web.UI.Page
Protected Sub Page_Load(. . .) Handles Me.Load
txtMsg.Text = ""
DisplayRow(Session(“Prog3_Index"))
End Sub
Cannot Update Correctly!
Post Back!
![Page 38: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/38.jpg)
38
PostBack
Partial Class Prog3_Updating
Inherits System.Web.UI.Page
Protected Sub Page_Load(. . .) Handles Me.Load
txtMsg.Text = “”
If Not IsPostBack Then
DisplayRow(Session(“Prog3_Index"))
Else
‘ Do not do anything
‘ Textboxes keep their values from client
End If
End Sub
![Page 39: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/39.jpg)
39
PostBack
Partial Class Prog3_Updating
Inherits System.Web.UI.Page
Protected Sub Page_Load(. . .) Handles Me.Load
txtMsg.Text = “”
‘ Else is not needed
If Not IsPostBack Then
DisplayRow(Session(“Prog3_Index"))
End If
End Sub
![Page 40: CS 3870/CS 5870: Note05](https://reader035.vdocument.in/reader035/viewer/2022081504/56813e44550346895da82d71/html5/thumbnails/40.jpg)
Buttons
• btnNew– New– Save New
• btnDelete– Delete– Cancel
• Enabled/Disabled
40