Top Banner
138 Programming in Visual Basic .NET-Coordinator Guide ©NIIT Summary 10 Total 105 OCR 2 Lesson 14: Objectives 5 Getting Started 20 JAM 5 14.D.1 30 14.P.1 30 Events and Delegates 20 Summary 5 Total 115 Cycle8 OCR 1 Lesson 15: Objectives 5 Getting Started 15 JAM 2 15.D.1 30 15.D.2 30 Using Web Services in a Web Application 15 Summary 8 Total 12 115 OCR 2 Lesson 16: Objectives 2 Getting Started 45 JAM 2 16.D.1 20 Deploying Components 15 JAM 5 Deploying Web Services 5 Summary 10 Total 104
138
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 02_VB_NET_CG

138 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Summary 10 Total 105 OCR2

Lesson 14: Objectives 5

Getting Started 20 JAM 5 14.D.1 30 14.P.1 30 Events and Delegates 20 Summary 5 Total 115

Cycle8 OCR1

Lesson 15: Objectives 5

Getting Started 15 JAM 2 15.D.1 30 15.D.2 30 Using Web Services in

a Web Application15

Summary 8 Total 12 115 OCR2

Lesson 16: Objectives 2

Getting Started 45 JAM 2 16.D.1 20 Deploying Components 15 JAM 5 Deploying Web

Services5

Summary 10 Total 104

Page 2: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 137

JAM 2 9.D.1 25 9.D.2 15 9.P.1 20 Creating a Graphical

Interface5

9.D.3 15 9.D.4 15 JAM 2 Summary 5 Total 116 OCR2

Lesson 10: Objectives 5

Getting Started 25 JAM 5 10.D.1 30 Threads in Visual Basic

.NET30

JAM 10 Summary 10 Total 115

Cycle6 OCR1

Lesson 11: Objectives 5

11.D.1 25 11.P.1 15 11.D.2 15 11.D.3 20 11.D.4 20 Summary 10 Total 110 OCR2

Lesson 12: Objectives 5

12.D.1 30 12.D.2 20 12.D.3 20 12.P.1 30 Summary 10 Total 115

Cycle7 OCR1

Lesson 13: Objectives 5

Getting Started 30 13.D.1 30 13.P.1 30

Page 3: 02_VB_NET_CG

136 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Common Dialog Classes

25

JAM 5 Summary 5 Total 117

Cycle3 OCR1

Lesson 5 : Objectives 5

Getting Started 30 5.D.1 50 5.P.1 15 Summary 10 Total 110 OCR2

Lesson 6: Objectives 5

6.D.1 15 6.D.2 30 6.D.3 15 6.D.4 30 Summary 10 Total 105

Cycle4 OCR1

Lesson 7: Objectives 5

7.D.1 45 Maintaining Data

Concurrency20

7.P.1 30 Summary 10 Total 110 OCR2

Lesson 8: Objectives 5

Getting Started 5 8.D.1 20 8.D.2 20 8.P.1 25 8.D.3 20 Summary 10 Total 105

Cycle5 OCR1

Lesson 9: Objectives 2

Getting Started 10

Page 4: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 135

SESSION PLAN

Cycle #

Activity/Problem No. Duration (In Mins)

Cycle1 OCR1

Lesson 1: Objectives 5 Getting Started 15 .NET Framework 15 JAM 5 Introduction to Visual

Basic .NET10

Visual Studio .NET IDE 45 Summary 10 Total 105 OCR2

Lesson 2: Objectives 5

Getting Started 15 Visual Basic .NET

Language Features30

JAM 5 2.D.1 20 JAM 5 2.P.1 20 Summary 10 Total 110

Cycle2 OCR1

Lesson 3: Objectives 5

Getting Started 20 3.D.1 30 3.D.2 20 3.P.1 25 JAM 2 Summary 5 Total 107 OCR2

Lesson 4: Objectives 2

Getting Started 30 4.D.1 20 4.P.1 25 JAM 5

Page 5: 02_VB_NET_CG

134 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim result As Integer

Dim sr As SoccerRanker = New SoccerRanker()

sr.PlayerPosition = TextPosition.Text

sr.NormalGoalsFor = TextNGoalsFor.Text

sr.NormalGoalsAgainst = TextNGoalsAgainst.Text

sr.PenaltyGoalsFor = TextPGoalsFor.Text

sr.PenaltyGoalsAgainst = TextPGoalsAgainst.Text

If sr.PlayerPosition = "MidFielder" Then

sr.ShotsTaken = TextShotTaken.Text

End If

result = sr.CalculatePoints()

MsgBox("The total number of points is " & result)

End Sub

Private Sub TextPosition_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextPosition.LostFocus

If Not (TextPosition.Text = "GoalKeeper" Or TextPosition.Text = "MidFielder" Or TextPosition.Text = "Forward") Then

MsgBox("Position should be either of GoalKeeper, MidFielder, or Forward (Case Sensitive)")

End If

End Sub

End Class

Page 6: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 133

Public Property ShotsTaken() As Integer

Get

Return shottaken

End Get

Set(ByVal Value As Integer)

shottaken = Value

End Set

End Property

Public Function CalculatePoints() As Double

Select Case playposition

Case Is = "GoalKeeper"

tpoints = (ngoalsfor * 3 + 4 * pgoalsfor) - (ngoalsagainst + pgoalsagainst)

Return tpoints

Case Is = "MidFielder"

tpoints = (ngoalsfor * 2) + shottaken

Return tpoints

Case Is = "Forward"

tpoints = (ngoalsfor * 4 + pgoalsfor * 3) - (ngoalsagainst + pgoalsagainst)

Return tpoints

End Select

End Function

End Class

Q2. Solution:

Design a user control and add text boxes and buttons to it. Add the component already created to calculate the number of points earned by a player. Here we have assumed the namespace ( name of the project if no namespace has been specified) to be SoccerLib.

Imports SoccerLib

Public Class MyUserControl

Inherits System.Windows.Forms.UserControl

Page 7: 02_VB_NET_CG

132 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

End Property

Public Property PenaltyGoalsAgainst() As Integer

Get

Return pgoalsagainst

End Get

Set(ByVal Value As Integer)

pgoalsagainst = Value

End Set

End Property

Public Property NormalGoalsAgainst() As Integer

Get

Return ngoalsagainst

End Get

Set(ByVal Value As Integer)

ngoalsagainst = Value

End Set

End Property

Public Property PlayerPosition() As String

Get

Return playposition

End Get

Set(ByVal Value As String)

playposition = Value

End Set

End Property

Public ReadOnly Property TotalPoints() As String

Get

Return tpoints

End Get

End Property

Page 8: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 131

SOLUTIONS: ADDITIONAL EXERCISES Q1. Solution:

Create a new project and add a component to it. Change the name of the component class to SoccerRanker. Add the code as given to the component class.

Public Class SoccerRanker

Inherits System.ComponentModel.Component

Private pgoalsfor As Integer

Private ngoalsfor As Integer

Private pgoalsagainst As Integer

Private ngoalsagainst As Integer

Private playposition As String

Private tpoints As Double

Private shottaken As Integer

Public Property PenaltyGoalsFor() As Integer

Get

Return pgoalsfor

End Get

Set(ByVal Value As Integer)

pgoalsfor = Value

End Set

End Property

Public Property NormalGoalsFor() As Integer

Get

Return ngoalsfor

End Get

Set(ByVal Value As Integer)

ngoalsfor = Value

End Set

Page 9: 02_VB_NET_CG

130 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

To be able to use the Web service that contains a Web method for providing details about a query, perform the following steps:

1. Right-click the DisplayCustOrderDet project in the Solution Explorer window and select Add Web Reference from the shortcut menu. This opens the Add Web Reference dialog box.

2. In the Address text box, enter the path of your Web service as shown below:

http://localhost/CustOrderData/service1.asmx?WSDL

3. Click the Go To ( ) button.

4. Click the Add Reference button. On performing this task, Visual Studio .NET will generate the proxy class for the Web service.

5. In the Solution Explorer window, expand the Web References folder. Right-click the localhost folder and select Rename from the shortcut menu. Rename the folder as WebService1.

6. Import the Web service namespace by adding the following code at the top of the code-behind file:

Imports DisplayCustOrderDet.WebService1

7. Type the following code in the WebForm1 class:

Private Sub btnGetData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetData.Click

Dim WebServiceObj As New CustOrderData()

Dim dsQryDet As New DataSet()

dsQryDet = WebServiceObj.CustOrder(txtCustID.Text, txtFromDt.Text, txtToDt.Text)

dgOrderDet.DataSource = dsQryDet.Tables(0).DefaultView

dgOrderDet.DataBind()

End Sub

8. Select Debug Start. In the form set the values of various controls, as given below:

Customer ID: C003

From Date: 06/12/2001

To Date: 06/20/2001

9. Click the Get Data button and check whether the details about orders are displayed in the DataGrid control.

Page 10: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 129

6. In the Solution Explorer window, select Form1.vb and click the View Code button.

7. Import the Web service namespace by adding the following code at the top of the code-behind file:

Imports DispCustOrderDet.WebService1

8. Type the following code in the Form1 class:

Private Sub btnGetData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetData.Click

Dim table1 As New DataTable()

Dim dsOrderData As New DataSet()

Dim WebServiceObj As New CustOrderData()

dsOrderData = WebServiceObj.CustOrder(txtCustID.Text, dtFromDt.Value.Date.ToString, dtToDt.Value.Date.ToString)

table1 = dsOrderData.Tables(0)

dgOrderDet.DataSource = table1.DefaultView

End Sub

9. Select Debug Start. In the form set the values of various controls, as given below:

Customer ID: C003

From Date: June 12, 2001

To Date: June 20, 2001

10. Click the Get Data button and check whether the details about orders are displayed in the DataGrid control.

UGP 3 1. Select File New Project. In the New Project dialog box, select Visual Basic Projects from

the Project Types pane. Select ASP.NET Web Application from the Templates pane. Specify the name of the project as DisplayCustOrderDet and Click the OK button.

2. In the ToolBox, click the Web Forms tab.

3. Create three Label controls and set their Text property to Customer ID, From Date, and To Date, respectively.

4. Create three TextBox controls and set their ID property to txtCustID, txtFromDt, and txtToDt respectively.

5. Create a Button control. Set its Text property to Get Data and ID property to btnGetData.

6. Create a DataGrid control and set its ID property to dgOrderDet.

7. In the Solution Explorer window, click the Show All Files button. Expand WebForm1.aspx. Double-click WebForm1.aspx.vb to switch to the Code Editor window.

Page 11: 02_VB_NET_CG

128 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

SqlQry = "Select Inv, Date, CustID, Cost, Advance from CustOrder Where CustID = '" + CustID + "' and [Date] Between '" + StartDt + "' and '" + EndDt + "'"

Dim CmdObj As New SqlDataAdapter(SqlQry, SqlConStr)

Dim DsObj As New DataSet()

CmdObj.Fill(DsObj, "ORDERDATA")

Return DsObj

End Function

6. Save the file.

7. To test the Web service, select Debug Start. This opens the Internet Explorer window. Click the CustOrder link. This opens a new page. Specify the value of the CustID parameter as C003. Specify the value of the StartDt parameter as 06/10/2001 and the value of the EndDt parameter as 06/20/2001. Click the Invoke button. Check whether the Web service returns the order details in an XML format.

UGP 2 1. Select File New Project. In the New Project dialog box, select Visual Basic Projects from

the Project Types pane. Select Windows Application from the Templates pane. Change the name of the project to DispCustOrderDet.

2. Create three Label controls in the form and set their Text property to Customer ID, From Date, and To Date, respectively.

3. Create a TextBox control and set its Name property to txtCustID.

4. Create two DateTimePicker controls and set their Name properties to dtFromDt and dtToDt, respectively.

5. Create a Button control and set its Name property to btnGetData. Set the Text property of the control to Get Data.

6. Create a DataGrid control and set the Name property of the control to dgOrderDet.

To be able to use the Web service that contains a Web method for providing details about a query, perform the following steps:

1. Right-click the DispCustOrderDet project in the Solution Explorer window and select Add Web Reference from the shortcut menu. This opens the Add Web Reference dialog box.

2. In the Address text box, enter the path of your Web service as shown below:

http://localhost/CustOrderData/service1.asmx?WSDL

3. Click the Go To ( ) button.

4. Click the Add Reference button. On performing this task, Visual Studio .NET will generate the proxy class for the Web service.

5. In the Solution Explorer window, expand the Web References folder. Right-click the localhost folder and select Rename from the shortcut menu. Rename the folder as WebService1.

Page 12: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 127

Namespace DBCon

Public Class GetProdDet

’ Functions for establishing connection

End Class

End Namespace

List the steps that you will follow to create a single deployable unit containing these two files.

Ans: To create a single deployable unit containing the two files, CalcDisc.vb and ProductDet.vb, perform the following steps given:

1) Build the GetProdDet class into a module by using the following statement:

vbc /t:module GetProdDet.vb /r:system.dll /r:system.data.dll

2) Compile the CalcDiscountAmt class file by executing the following statement at the command prompt:

vbc /addmodule:GetProdDet.netmodule /t:module CalcDisc.vb

3) Create a multi-file assembly by using the Al.exe utility by typing the following statement at the command prompt:

al /out:App.dll /t:lib GetProdDet.netmodule CalDisc.netmodule

Solutions: Unguided Practice

UGP 1 1. In Visual Studio .NET, select File New Project. Select Visual Basic Projects from the

Project Types pane. Select ASP.NET Web Service from the Templates pane.

2. Change the name of the project to CustOrderData and click the OK button.

3. Click the Service1.asmx file in the Solution Explorer window. Click the View Code button in the Solution Explorer window to switch to the Code Editor window.

4. Add the following statements before the class declaration to import the required namespaces:

Imports System.Data

Imports System.Data.SqlClient

5. Change the name of the Web service class to CustOrderData. Type the following code in the class:

<WebMethod()> Public Function CustOrder(ByVal CustID As String, ByVal StartDt As String, ByVal EndDt As String) As DataSet

Dim SqlConStr As String

SqlConStr = "Server=localhost;database=CallCenter11;uid=sa;pwd="

Dim SqlQry As String

Page 13: 02_VB_NET_CG

126 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

privileges, they will not be able to install an application. However, depending on the availability of time, faculty may allow students to create a deployment project and build the .msi file.

Additional Inputs

Demo

The demo for this lesson is stored in the Solutions\VB.NET\Lesson16 folder. To install the Data Entry Application, double-click the Setup.exe file located in the Solutions\VB.NET\Lesson 16\16.D.1\CallCenter\Debug folder.

Performing Conditional Deployment

You can perform deployment based on some conditions. Conditional deployment can be performed by using either the Launch Condition editor in a deployment project or the Condition property of a file or a registry key. The information about conditional deployment is provided in the Appendix.

Solutions: Just a Minute… 1. Which of the following deployment editors can be used to specify the Control Panel settings on

the target computer?

a) File Systems editor

b) Launch Conditions editor

c) Registry editor

d) User Interface editor

Ans: c) Registry editor

2. Consider the following files:

’CalcDisc.VB Imports System.Data

Imports System.Data.SQL

Imports DBCon

Public Class CalcDiscountAmt

’ Call functions from the GetProdDet class

’ Calculate the discounted price

End Class

’ProductDet.VB Imports System.Data

Imports System.Data.SQL

Page 14: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 125

4. In the Address text box, type the address as http://localhost/GetQueryData/service1.asmx?WSDL and press the Enter key.

5. Click the Add Reference button.

6. In the Solution Explorer window, right-click the newly created (localhost) folder, and select Rename from shortcut menu. Type the name of the folder as WebService1.

7. In the Solution Explorer window, select Form1.vb and click the View Code button.

8. Press the Enter key after the Imports statement.

9. Execute the project by selecting Debug Start.

To test the application, specify Q001 as the query ID.

Solutions: Just a Minute… 1. What is the difference between a Web service and a component?

Ans: Components use object model-specific protocols, such as Internet Inter-ORB Protocol (IIOP) and Remote Method Invocation (RMI), for communicating with client applications. In contrast to components, Web services use Internet standards, such as HTTP and XML, to communicate with client applications. This communication approach makes Web services independent of any language or platform. Any computer that has access to the Internet can easily access a Web service. This also enables a number of applications residing on a variety of software and hardware platforms to exchange data. Thus, Web services architecture takes the best features of components and combines them with the Web.

2. How can you locate the Web services developed by a Web service provider?

Ans: Web services providers publish the information about their Web services at centralized locations called Web service directories. They provide information about their Web services by publishing the .disco file. This XML-based file contains links to other resources that describe the Web service. You can use the Add Web Reference dialog box to browse such Web directories and locate a Web service that suits your requirements.

3. Which attribute is used to describe a Web service?

Ans: The WebService attribute is used to provide a description about a Web service.

Lesson Sixteen

Experiences This lesson discusses various project templates included in Visual Studio .NET for creating deployment projects. Discuss each template and explain the situation in which the template will be used. After explaining deployment project templates, demonstrate the use of various deployment editors. Steps for performing various tasks, such as adding files, registry keys, and launch conditions, are given in the book. You can refer to these steps and demonstrate how each editor can be used for different purposes. The demo given in this lesson uses the Data Entry application created in Lesson 9. Therefore, ensure that the application exists on the computer before you start with this lesson.

It is important to note that the setup.exe and the .msi files generated in the demo can be executed only by users belonging to the Administrators group. Since students cannot be given administrative

Page 15: 02_VB_NET_CG

124 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

communication protocol for Web services. State that SOAP is an XML-based protocol that runs over HTTP. In other words, SOAP = HTTP + XML.

While discussing the demo, state the need for a Web service in the given scenario. Demonstrate each step involved in the creation of a Web service. Discuss the code model for a Web service. Explain the <WebService()> and <WebMethod()> attributes of a Web service.

In the next demo, explain the process of locating and using a Web service in an application. In addition, state that the process of locating and using a Web service in an application is the same in case of both Windows- and Web-based applications.

This lesson also includes a simple ASP.NET Web application. While discussing this application, discuss some of the commonly used controls in ASP.NET Web application. Demonstrate the use of the design and HTML views of the Web Form Designer. State that the code for application logic can be provided in either the HTML file or the code-behind file.

Additional Inputs The demos for this lesson are stored in the Solutions\VB.NET\Lesson15\ folder. To be able to work with Web projects, you must have IIS 4.0 or later installed on the computer. In addition, you must be a member of the Administrators or VS Developers group. The instructions for executing demos are given below:

15.D.1

Perform the following steps to create the Web service:

1. Select File New Project. Select Visual Basic Projects from the Project Types pane. Select ASP.NET Web Service from the Templates pane.

2. Specify the location as http://localhost/GetQueryData. Click the OK button.

3. Switch to the Code Editor window by pressing the F7 key.

4. Remove the existing code and paste the code given in the Service1.asmx.vb file provided on the CD.

5. In the code, check value of the SqlConStr variable, which contains the connection string. Change the string as per the requirements. (For example, if the name of the database server is NIIT-CATS, the connection string accordingly.)

7. To execute the Web service, press the F5 key.

To test the Web service, specify the query ID as Q001.

15.D.2

The files for this demo are stored in the Solutions\VB.NET\Lesson 15\15.D.2\DisplayQueryStatus folder. If the project does not work properly (it may give an error when you click the Query button on the form), perform the following steps:

1. Open the project in Visual Studio .NET.

2. In the Solution Explorer window, expand the Web References folder. Delete the WebService1 folder by selecting it and pressing the Del key.

3. Right-click the project (DisplayQueryStatus) in the Solution Explorer window and select Add Web Reference from the shortcut menu to invoke the Add Web Reference dialog box.

Page 16: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 123

10. Add the following code in the Click event of the Button1:

Dim ic As CInterestCalculator = New CInterestCalculator()

If (Val(txtPrincipal.Text) > 0) Then

ic.PrincipalAmount = txtPrincipal.Text

End If

If (Val(txtTime.Text) > 0) Then

ic.NumberOfYears = txtTime.Text

End If

If (Val(txtRate.Text) > 0) Then

ic.InterestRate = txtRate.Text

End If

Dim interest = ic.CalculateInterest()

Dim amount = ic.CalculateAmount()

MsgBox("Total interest is " & interest)

MsgBox("Total amount is " & amount)

11. Build the application using the Build Solution option from the Build menu.

Note You can test the InterestCalculationCtl control by performing the following steps:

1. Create a new Windows Application project with the project name as Interest_Calculation_Test.

2. Add the component InterestCalculationCtl to the Toolbox by selecting Customize Toolbox option from the short-cut menu.

3. Drag the InterestCalculationCtl control to Form1.

4. Execute the application.

Lesson Fifteen

Experiences Begin the session by revising components. Then, state the limitations of various object models, such as COM and CORBA, in case of Web applications. Then, introduce Web services. State that Web services are reusable components. However, they use HTTP and XML for communicating with client applications. Therefore, they can be used from a computer that has an Internet connection.

Discuss various Web service enabling technologies. Explain the role of each of these technologies in the development and discovery of a Web service. In addition, discuss the role of SOAP as a standard

Page 17: 02_VB_NET_CG

122 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

End Get

End Property

Public Function CalculateInterest() As Double

interest = (principal * rate * years) / 100

Return interest

End Function

Public Function CalculateAmount() As Double

amount = interest + principal

Return amount

End Function

End Class

4. Build the application using the Build Solution option from the Build menu.

UGP 2

1. Create a new Windows Control Library project with the name Interest_Calculation _Control.

2. Change the class name and the VB file name to InterestCalculationCtl.vb by right-clicking UserControl1.vb and selecting the Rename option from the short-cut menu.

3. Add the component CInterestCalculator to the Toolbox.

Note To add the component CInterestCalculator, right-click Toolbox and select Customize Toolbox. In the Customize Toolbox dialog box, click the .NET Framework Components tab and then click the Browse button. Navigate to the bin folder under the Interest_Calculation_Component folder and select Interest_Calculation_Component.dll and click the Open button.

4. Add the component CInterestCalculator to InterestCalculationCtl form from the Toolbox..

5. Add three Label controls and three TextBox controls to the form Form1. The Text property of the Label controls should be Principal, Time, and Rate respectively.

6. Remove the default values of the Text property for all three TextBox controls. Specify the Name property of the TextBox controls as txtPrincipal, txtTime, and txtRate respectively.

7. Add a button to the form. Change the Text property of the button to Calculate.

8. Add the following code as the first line in the Code window:

Imports Interest_Calculation_Component

9. Change the class name InterestCalculationCtl in the code window.

Page 18: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 121

Return rate

End If

End Get

Set(ByVal Value As Double)

If (Value >= 0) Then

rate = Value

End If

End Set

End Property

Public Property PrincipalAmount() As Double

Get

If (principal > 0) Then

Return principal

End If

End Get

Set(ByVal Value As Double)

If (Value > 0) Then

principal = Value

End If

End Set

End Property

Public ReadOnly Property TotalInterestAmount() As Double

Get

Return interest

End Get

End Property

Public ReadOnly Property TotalAmount() As Double

Get

Return amount

Page 19: 02_VB_NET_CG

120 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

18. Drag the CategoryValidatorCtl control to Form1.

19. Execute the application.

Solutions: Unguided Practice

UGP 1

1. Create a new Class Library project with the name Interest_Calculation_Component.

2. In the Solution Explorer, right-click Class1.vb to change the name to InterestDeterminator.vb by using the Rename option from the short-cut menu.

3. In the code window, delete the original class and change the code as following:

Public Class CInterestCalculator

Inherits System.ComponentModel.Component

Private years As Double

Private rate As Double

Private principal As Double

Private interest As Double

Private amount As Double

Public Property NumberOfYears() As Double

Get

If (years > 0) Then

Return years

End If

End Get

Set(ByVal Value As Double)

If (Value > 0) Then

years = Value

End If

End Set

End Property

Public Property InterestRate() As Double

Get

If (rate > 0) Then

Page 20: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 119

7. Add the component CategoryDeterminator to the Toolbox.

Note To add the component CategoryDeterminator, right-click Toolbox and select Customize Toolbox. In the Customize Toolbox dialog box, click the .NET Framework Components tab and then click the Browse button. Navigate to the bin folder under the Category_Calculation_Component folder and select Category_Calculation_Component.dll and click the Open button.

8. Add the component CategoryDeterminator to CategoryValidatorCtl form from the Toolbox.

9. Add three Label controls and three TextBox controls to the form CategoryValidatorCtl. The Text property of the Label controls should be Hours logged, Hours Worked, and Category respectively.

10. Remove the default values of the Text property for all three TextBox controls. Specify the Name property of the TextBox controls as txtHrslogged, txtHrsWorked, and txtCategory respectively.

11. Add a button to the form. Change the Text property of the button to Calculate.

12. Add the following code as the first line in the Code window:

Imports Category_Calculation_Component

13. Change the class name CategoryValidatorCtl in the code window.

14. Add the following code in the Click event of the Button1:

Dim cd As CategoryDeterminator

cd = New CategoryDeterminator()

If (Val(txtHrslogged.Text)>0) then

cd.HoursLogged = Val(txtHrslogged.Text)

End If

If (Val(txtHrslogged.Text) > 0) Then

cd.HoursWorked = Val(txtHrsWorked.Text)

End If

txtCategory.Text = cd.CalculateCategory()

If (Val(txtHrslogged.Text) < Val(txtHrsWorked.Text)) Then

MsgBox("Hours worked cannot be more than Hours logged")

End If

15. Build the application using the Build Solution option from the Build menu.

16. Create a new Windows Application project with the project name as Employee_Category_Test.

17. Add the component CategoryValidatorCtl to the Toolbox by selecting Customize Toolbox option from the short-cut menu.

Page 21: 02_VB_NET_CG

118 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

If (hrsworked > 0) Then

Return hrsworked

End If

End Get

Set(ByVal Value As Double)

hrsworked = Value

End Set

End Property

Public Function CalculateCategory() As String

Dim productivity As Integer

If (hrsworked > 0 And hrslogged > 0) Then

productivity = (hrsworked / hrslogged) * 10

Select Case productivity

Case 1 To 3

Return "Average"

Case 4 To 6

Return "Good"

Case 7 To 10

Return "Excellent"

End Select

End If

If (hrsworked = 0 Or hrslogged = 0) Then

Return "Enter Correct Values"

End If

End Function

End Class

4. Build the application using the Build Solution option from the Build menu.

5. Create a new Windows Control Library project with the name Employee_Category _Control.

6. Change the class name and the VB file name to CategoryValidatorCtl.vb by right-clicking UserControl1.vb and selecting the Rename option from the short-cut menu.

Page 22: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 117

4. Identify the syntactical error in the following code snippet:

Public Class Form1

Inherits System.Windows.Forms.Form

Event UserEvent(dim x as Integer)

End Class

Ans. Remove Dim keyword from the parameter list

5. Fill in the blank:

Ans. In Visual Basic .NET, delegates are reference types based on the System.Delegates class.

Solution: Guided Practice

14.P.1 1. Create a new Class Library project with the name Category_Calculation_Component.

2. In the Solution Explorer, right-click Class1.vb to change the name to CategoryDeterminator.vb by using the Rename option from the short-cut menu.

3. In the code window, delete the original class and change the code as following:

Public Class CategoryDeterminator

Inherits System.ComponentModel.Component

Private hrslogged As Double

Private hrsworked As Double

Public Property HoursLogged() As Double

Get

If (hrslogged > 0) Then

Return hrslogged

End If

End Get

Set(ByVal Value As Double)

hrslogged = Value

End Set

End Property

Public Property HoursWorked() As Double

Get

Page 23: 02_VB_NET_CG

116 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

The following is an example of adding a list control when users clicks a button:

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Dim lstNewListBox As New ListBox()

lstNewListBox.size = New Size(150, 200)

lstNewlistBox.Location = New Point(50,50)

lstNewListBox.Items.Add(“First item”)

lstNewListBox.Items.Add(“Second item”)

Me.Controls.Add(lstNewListBox)

End Sub

FAQs Q1. Can we add a control at run time?

Ans. Yes, you can add a control at run time (Refer to Additional Inputs given in lesson 14).

Q2. What is side-by-side deployment?

Ans. Side-by-side deployment is the process of deploying two different versions of an assembly.

Q3. How can we resize more than one control at the same time?

Ans. You can resize more than one control at the same time by selecting the controls together.

Solutions: Just a Minute… 1. Which method will you override to render graphical user interface to customized controls? Ans. The OnPaint() method. 2. What format string will you use to specify a date in the year-month-date format? Ans. “yy-MM-dd” 3. How will you ensure that an entire control is redrawn? Ans. By adding the following code to the constructor of the control: ResizeDraw=True

Page 24: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 115

salary = Value

Else

MsgBox("Employee salary should be between $3000 to $35000")

End If

End Set

End Property

End Class

‘Create a test application by the name Employdetails_com. Add a button and three label controls and three textbox controls. Add the following code to the Click event of the button in the test application. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim ed As DataValidator = New DataValidator()

ed.EmployeeID = TextEmpId.Text

ed.EmployeeAge = Val(TextAge.Text)

ed.EmployeeSalary = Val(TextSalary.Text)

End Sub

Lesson Fourteen

Experiences Connect to the last unit of components. Tell students that as all controls in Java are JavaBean classes, similarly all controls are components. Emphasize that controls are components that either have a graphical interface or are used in the user interface.

To explain user controls, you can use the example of an application in which users can interact with a database. The screen that the users use to view or change data has many controls. All the controls on the screen can be used as one unit.

While teaching the rendering of a graphical interface of a customized control, emphasize upon the fact that the OnPaint() method does not belong to controls only. This method needs to be overridden to draw any component. Tell students that they will never call the OnPaint() method directly in their code.

Additional Input

Adding Controls at Run time

You can add controls to forms at run time. This capability was available in the earlier versions of VB also. However, because Visual Basic .NET is based on object-oriented technology, adding controls becomes even easier.

Page 25: 02_VB_NET_CG

114 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Return empId

End Get

Set(ByVal Value As String)

If Value.Length > 5 Then

MsgBox("Employee ID should be of the form E123")

ElseIf Value Like "[E][0-9][0-9][0-9]" Then

empId = Value

Else

MsgBox("Employee ID should be of the form E123")

End If

End Set

End Property

Public Property EmployeeAge() As Integer

Get

Return age

End Get

Set(ByVal Value As Integer)

If Value >= 21 And Value <= 60 Then

age = Value

Else

MsgBox("Employee age can be from 21 to 60 years")

End If

End Set

End Property

Public Property EmployeeSalary() As Double

Get

Return salary

End Get

Set(ByVal Value As Double)

If Value >= 3000 And Value <= 35000 Then

Page 26: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 113

2. How does Visual Basic .NET prevent DLL Hell?

Ans: To avoid DLL Hell, Visual Basic .NET:

1 Isolates applications

2 Enforces Windows NTs “Last Known Good”

3 Enforces file versioning

3. What is a version number?

Ans: A version number has four parts: the major build version, the minor build version, the build and the revision. It is used by the runtime to determine whether or not two versions are compatible. The major and minor build numbers are used to perform compatibility check. A change in these two numbers signifies a different version. A change in the build number signifies a small change in the form of a patch or bug fixing.

Solutions: Just a Minute… 1. You need to write a program to validate user login. This program will be used across

applications. What will you develop the program as and why?

Ans: The program will be developed as a component because then you can use it across applications.

2. Why does an assembly need a shared name?

Ans: An assembly needs a shared name to avoid conflicts with other assemblies in the Global Assembly Cache.

3. How will you use a component?

Ans: You will use a component by its fully qualified name.

Solution: Guided Practice

13.P.1

Public Class DataValidator

Inherits System.ComponentModel.Component

'Declare the variable

Private empId As String

Private age As Integer

Private salary As Double

'Declare properties

Public Property EmployeeID() As String

Get

Page 27: 02_VB_NET_CG

112 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

You can tell students that components that deal with business logic, such as calculating price, fit into the middle tier. The presentation tier involves more of visual components.

You can compare components to JavaBeans. You can remind them that they had learned about certain standards regarding the writing of a JavaBean. A similar standard is established by IComponent, and in turn, by the Component class of Visual Basic .NET.

While covering COM and ActiveX, do not add more content than what is provided in the lesson. Tell students that COM and ActiveX will not be developed in Visual Basic .NET. Emphasize the fact that the use of COM is allowed in Visual Basic .NET for backward compatibility only.

Polymorphism is an important concept that the students know well. Here, emphasize upon implementing interfaces.

FAQs 1. What is DLL Hell?

Ans: It is a situation in which one version of a DLL overwrites another version. DLL Hell is a disadvantage that comes with COM. GUIDs are sometimes altered and registry settings are changed, which renders the application that was using the overwritten DLL unable to execute.

Page 28: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 111

Instead of:

custid = lbcustid.SelectedItem()

result = dt.Rows.Find(custid)

txtfname.Text = dt.Columns(1).ToString

txtlname.Text = dt.Columns(2).ToString

txtaddress.Text = dt.Columns(3).ToString

txtphone.Text = dt.Columns(4).ToString

txtmail.Text = dt.Columns(5).ToString

8. Remove the breakpoint by right-clicking the line and selecting Remove Breakpoint from the shortcut menu. Run the application again.

UGP 3 1. Open the application DiscountApp

3. Modify the code for the Click event of the Discounted Price button as follows:

Try

cost = txtcost.Text

discount = txtdiscount.Text

result = discount / 100 * cost

discount = cost – result

MsgBox(discount,MsgBoxStyle.Information, "Result")

Catch err As System.InvalidCastException

MsgBox(" Please enter a numeric value", MsgBoxStyle.OKOnly, "Error")

txtcost.Text = ""

txtdiscount.Text = ""

txtcost.Focus()

End Try

Lesson Thirteen

Experiences

Page 29: 02_VB_NET_CG

110 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

27. To associate the created HTML Help file with the HelpProvider control, right-click the HelpProvider1 control from the component tray and select Properties from the shortcut menu.

28. The Help file to be associated with the HelpProvider control is specified using the HelpNamespace property of the HelpProvider control. The HelpNamespace property is present under the Misc category in the Properties window.

29. When the HelpNamespace property is clicked, a button appears to the right in the Properties window. Click the displayed button.

30. In the Open Help File dialog box, select the compiled chm file and click Open.

31. Right-click the CrystalReportViewer control and select Properties from the shortcut menu.

32. Enter Using Main Report Window as the keyword in the HelpKeyword on HelpProvider1 property and select KeywordIndex as the HelpNavigator on HelpProvider1 property. Set the ShowHelp on HelpProvider1 property to True.

UGP 2

1. Open the application CustData.

2. In the Windows Form Designer, double-click the Button1 control. The code for the Click event of Button1 is displayed in the Code Editor window.

3. Right-click the line custid = lbcustid.SelectedItem()in the code. Then, select Insert Breakpoint from the shortcut menu.

4. To run the application, select Debug from the menu bar. Then, select Start from the Debug menu. The application runs till it reaches the breakpoint.

5. Execute the application step-by-step by using Step Into from the Debug menu to check each line of code.

6. Add the following lines:

custid = lbcustid.SelectedItem()

result = dt.Rows.Find(custid)

txtfname.Text = result(1).ToString

txtlname.Text = result(2).ToString

txtaddress.Text = result(3).ToString

txtphone.Text = result(4).ToString

txtmail.Text = result(5).ToString

Page 30: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 109

S.No. HTML Title Content To be saved as

size<br> Search Text - Used to search for a text in the Crystal Report<br>

12. To create an index file, click the Index tab. A message box is displayed confirming whether to create a new index file or open an existing one.

13. By default, Create a new index file radio button is selected. Click OK.

14. In the Save As dialog box, enter the name and the path for the index file and click Save.

15. To insert a keyword, click the Insert a keyword icon on the toolbar.

16. The Index Entry dialog box is displayed. Type Using Group Tree in the Keyword text box and click the Add button. The Path or URL dialog box is displayed.

15. Click the Browse button and select usinggrouptree.htm from the Open dialog box. Click Open.

16. Click OK. Again click OK to close the Index Entry dialog box.

17. Similarly, insert the following keywords:

Keyword File to linked with the keyword

Using Main Report Window usingmainreportwindow.htm

Using Report Toolbar usingtoolbar.htm

18. To create a content page, click the Contents tab. A message box is displayed confirming whether to create a new contents file or opening an existing one. Click OK. Enter the path and name for the Contents file as tocforCrystalReportHelp and click Save.

19. Click the Insert a page icon on the toolbar.

20 In the Table of Contents Entry dialog box, type Using Group Tree in the Entry title text box and enter usinggrouptree.htm in the File or URL text box.

21. Similarly, add the following content pages:

Entry title File to linked with the title

Using Main Report Window usingmainreportwindow.htm

Using Report Toolbar usingtoolbar.htm

22. You can specify a default HTML file for your project. When the Help file is displayed to a user, the HTML file set as the default file for the project is opened and displayed automatically. To set a default file for the project, click the Project tab and then click the Change project options icon from the toolbar.

23. Enter the file usingmainreportwindow.htm as the default file in the Default file combo box and click OK.

24. Compile the Project file.

25. Open the application project and open the form designer.

26. Drag a HelpProvider control to the form.

Page 31: 02_VB_NET_CG

108 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

7. To create a new HTML page, click File from the menu bar and then click New from the File menu.

8. Select HTML File in the New dialog box and click OK.

9. Enter the title for the HTML page as Using the group tree and click OK.

10. Write the following text after the <Body> tag in the HTML source page in the right side of the window and save the HTML page as usinggrouptree.htm.

Group tree is used to display the groups into which the Crystal Report is divided. For example, if the Crystal Report is grouped to display data on a weekly basis, the Group Tree would contain the weeks into which the Crystal Report has been broken down.<br> To view the data for a group, click that group in the Group Tree.<br> The data for the group is outlined with a red line.

11. Similarly, create HTML pages as displayed below:

S.No. HTML Title Content To be saved as

1. Using the Main Report Window

The Main Report window is used to display the Crystal Report. The data of the Crystal Report can be viewed in the Main Report window.<br> This window displays: Field names<br> Field values<br> Page header<br> Report header<br> Page footer<br> Report footer<br>

usingmainreportwindow.htm

2. Using the Crystal Report Toolbar

The various toolbar icons of the Report view are:<br> Go to First Page - Used to move to the first page of the Crystal Report<br> Go to Previous Page - Used to move to the previous page of the Crystal Report<br> Go to Next Page- Used to move to the next page of the Crystal Report<br> Go to Last Page - Used to move to the last page of the Crystal Report<br> Goto Page- Used to move to the page specified by the user<br> Close Current View - Used to close the currently open Crystal Report view <br> Print Report - Used to print the Crystal Report<br> Refresh - Used to refresh the Crystal Report view<br> Export Report - Used to export the Crystal Report to other formats, such as Adobe Acrobat, Microsoft Excel, Microsoft Rich Text, HTML, and Microsoft Word<br> Toggle Group Tree - Used to toggle the state of the Group Tree to the opposite of the current state. For example, if the Group Tree is visible in the Crystal Report, clicking the Toggle Group Tree hides the Group Tree, and if the Group Tree is hidden, clicking the Toggle Group Tree icon performs the opposite action<br> Zoom - Used to display the Crystal Report in a customized

usingtoolbar.htm

Page 32: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 107

6. In the Properties window of the ToolBar control, click the ImageList property and then select ImageList1 from the drop-down list.

7. Click the Buttons property and then click the button that appears to the right of the Properties window. The ToolBarButton Collection Editor is displayed.

8. To add a button in the ToolBar control, click the Add button. ToolBarButton1 is added in the Members list.

1. Click the ImageIndex property of ToolBarButton1 to represent the button as an image.

2. From the drop-down list, select 0. The image displayed next to the index number is the image of the button.

3. Set the Text property of ToolBarButton1 as blank.

9. Similarly, add two more buttons to the toolbar and add images for them and click OK to close the ToolBarButton Collection Editor.

10. Add the following code for the Load event of the form:

Dim response As MsgBoxResult

response = MsgBox("Do you want to view tool tips for the toolbar icons", MsgBoxStyle.YesNo, "Information")

If response = MsgBoxResult.Yes Then

ToolBarButton1.ToolTipText = "Save"

ToolBarButton2.ToolTipText = "Open"

ToolBarButton3.ToolTipText = "New"

End If

11. Execute the application

Solution: Unguided Practice

UGP 1

Use the application created for 8.D.1.

1. Open HTML Help Workshop.

2. To create a Project file, click File from the menu bar. Then, click New.

3. The Project option is selected by default. Click OK. The first screen of the wizard for creating a new project is displayed.

4. Click Next. The New Project—Destination screen is displayed. On this screen, enter the name for the project and the path where you want to create the project as c:\CrystalReportHelp.

5. Click Next. The New Project—Existing Files screen is displayed. Since you do not have any existing help files, click Next.

6. The New Project—Finish screen is displayed. Click Finish to create a new Project file.

Page 33: 02_VB_NET_CG

106 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Lesson Twelve

Experiences This session contains more practice than theory. Start the session by explaining a scenario in which a new user might need help while working with an application. The user might need to know about how to perform an action or information about an application component, such as buttons and icons.

The students should clearly understand the function of a HelpProvider control and its properties.

All the three demos use the same Windows application. Therefore, before starting 12.D.2 and 12.D.3, ask the students to remove the HelpProvider control and all other setting added while doing the previous demos.

Solutions: Just A Minute… 1. Identify the methods for providing dynamic help to a user while executing an application.

Ans: Types of help that can be provided to a user are:

HTML Help

ToolTips

What’s This Help

2. Write a code to set the tool tip text for the button control Button1 and display the tool tip text after 1000 milliseconds after the user points to the button and display the tool tip for 2000 milliseconds when the cursor is kept stationary on the button.

Ans: The code is as follows:

ToolTip1.AutoPopDelay = 2000

ToolTip1.InitialDelay = 1000

Solution: Guided Practice

12.P.1

Use the application created for 7.P.1.

1. Drag an ImageList control from the Windows Forms tab of the Toolbox into the form.

2. Open the Properties window of the ImageList control. Click the Images property. Then, click the button that appears on the right of the Properties window.

3. The Image Collection Editor is displayed. To add an image in the image list, click the Add button.

4. The Open dialog box is displayed. Select the image file that you want to insert in the image list and click Open. Add three images for the Save, New, and Open buttons and click OK to close the Image Collection Editor dialog box.

5. Drag a ToolBar control from the Windows Forms tab of the Toolbox into the form.

Page 34: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 105

Debugging options can be accessed by expanding the Debugging folder:

Solution: Guided Practice

11.P.1

Use the application created for Lesson 8 Unguided Practice 1.

Modify the code for the Click event of the Show Revenue Report button:

Try

CrystalReportViewer1.ReportSource = "C:\Documents and Settings\User1\My Documents\Visual Studio Projects\WindowsApplication29\Crystalreport1.rpt"

Catch err As ApplicationException

MsgBox("The Report could not be loaded", MsgBoxStyle.OKOnly, "dxf")

End Try

Modify the code for the Click event of the Show Employee Performance Report button:

Try

CrystalReportViewer1.ReportSource = "C:\Documents and Settings\User1\My Documents\Visual Studio Projects\WindowsApplication29\Crystalreport2.rpt"

Catch err As ApplicationException

MsgBox("The Report could not be loaded", MsgBoxStyle.OKOnly, "dxf")

End Try

Page 35: 02_VB_NET_CG

104 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

FAQs 1. Can we view the list of breakpoints that we have in an application?

Ans: Yes. Click Debug from the menu bar. Then, click Windows from the Debug menu and click Breakpoints from the Windows submenu. A list of inserted breakpoints is displayed.

2. How can we jump from one breakpoint to another?

Ans: You can jump to another breakpoint by just double-clicking the other breakpoint.

3. While executing a code, can we ignore the code in the Try block?

Ans: Yes. You can use the Exit Try statement to ignore the code in the Try block.

Solutions: Just A Minute… 1. In the Try…Catch…Finally statement, when is the code given in each of the blocks executed?

Ans: When an application runs, the code in the Try block is executed. If the code in the Try block gives an error, the Catch block handles the error. The code included in the Finally block is executed just before the control exits the Try…Catch…Finally block in which the error occurred.

2. What is the difference between the On Error GoTo 0, On Error Resume Next, and On Error GoTo ErrorHandler statements and when is each of then used?

Ans: You can use the On Error Resume Next statement to specify that when an error occurs, the control should pass to the next line of code following the line in which the error occurred. The On Error GoTo 0 statement can be used to disable any error handler in a procedure.

Additional Inputs Debugger settings can be specified by using the Tools menu and selecting Options from the Tools menu. The following dialog box is displayed:

Page 36: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 103

Additional Inputs The solutions for demos and guided practices for this lesson are stored in the Solutions\VB.NET\Lesson11 folder.

Demos and Practices

Before executing the demos and practices, perform the following steps:

11.D.1

1. Open the Code Editor window of the form.

In the code for the Load event of the form:

Dim connparameter As String = "provider=sqloledb;user id=sa;password=;database=CallCenter11;server=localhost"

2. Replace the user id, password and server values according to the requirements.

11.D.2

11.D.2 involves ADO.NET connectivity. Therefore, before running the application, perform the steps given for Lesson 5 demos and practices.

11.D.3

1. Open the Code Editor window of the form.

In the code for the Load event of the form:

Dim connparameter As String = "provider=sqloledb;user id=sa;password=;server=tulikas-d190;" & "Database=" & db

2. Replace the user id, password and server values according to the requirements.

11.D.4

11.D.4 involves ADO.NET connectivity. Therefore, before running the application, perform the steps given for Lesson 5 demos and practices.

11.P.1

Before running 11.P.1, perform the following steps:

1. Copy the project folder to the local machine.

2. Open the Code Editor window for the form.

3. Change the code for the Click event of both the buttons to:

CrystalReportViewer1.ReportSource =<path of the crystal report file eg. C:\My Documents\8.D.1\CrystalReport1.rpt>

Page 37: 02_VB_NET_CG

102 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

SalaryObject.ThreadDone

MsgBox("The Annual Salary is: " & totalsalary)

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Call Callthread()

End Sub

End Class

Public Class SalaryClass

Public month As Double

Public salary As Double

Public totalsalary As Double

Public Event ThreadDone(ByVal value As Double)

Sub CalculateAnnualSalary()

totalsalary = month * salary

RaiseEvent ThreadDone(totalsalary)

End Sub

End Class

Lesson Eleven

Experiences Start the session with a discussion on the types of errors that can occur in an application. Give examples of syntactical, logical, and run-time errors.

Bring out the advantage of structured exception handling by explaining to students that structured exception handling allows filtering of errors based on the error type, error class, error message, and so on. Tell students that including the Finally statement is not necessary for using structured exception handling.

Explain that all error classes are derived from the Exception class. Discuss only ApplicationException, SystemException, and IOException classes at this stage.

Demonstrate the use of Debug windows to students.

Page 38: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 101

End Sub

Private Sub cmdWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWrite.Click

sw.BaseStream.Seek(0, SeekOrigin.End)

writedata(rtbCQuery.Text, sw)

input = MsgBox("Do you wish to read from the file?", MsgBoxStyle.YesNo, "User Input")

If input = MsgBoxResult.Yes Then

cmdRead.Enabled = True

cmdWrite.Enabled = False

rtbCQuery.Text = ""

End If

End Sub

Private Sub frmQueryDetails_Load(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

cmdRead.Enabled = False

End Sub

End Class

10.A.2

Imports System.Threading.Thread

Public Class Form1

Inherits System.Windows.Forms.Form

Dim WithEvents SalaryObject As New SalaryClass()

Protected Sub Callthread()

Dim MyThread As New System.Threading.Thread(AddressOf SalaryObject.CalculateAnnualSalary)

SalaryObject.month = 12

SalaryObject.salary = 15000

MyThread.Start()

End Sub

Sub SalaryDoneEventHandler(ByVal totalsalary As Double) Handles

Page 39: 02_VB_NET_CG

100 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Solutions: Additional Exercises

10.A.1

Imports System.IO

Public Class frmQueryDetails

Inherits System.Windows.Forms.Form

Dim fstream As New FileStream("C:\Customer_Query.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)

Dim sw As New StreamWriter(fstream)

Dim input As String

Public Sub writedata(ByVal Data As String, ByVal sw As StreamWriter)

sw.Write("Entry : " + Today)

sw.WriteLine(" " + Data)

sw.Flush()

End Sub

Public Sub readdata(ByVal r As StreamReader)

While r.Peek() > -1

rtbCQuery.Text = r.ReadToEnd

End While

End Sub

Private Sub cmdRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRead.Click

Dim sr As New StreamReader(fstream)

sr.BaseStream.Seek(0, SeekOrigin.Begin)

readdata(sr)

cmdWrite.Enabled = True

cmdRead.Enabled = False

input = MsgBox("Do you wish to clear the text from the text area?", MsgBoxStyle.YesNo, "User Input")

If input = MsgBoxResult.Yes Then

rtbCQuery.Text = ""

End If

Page 40: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 99

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

Case 1

Dim NewMDIChild As New frmOrderdetails()

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

StatusBar1.ShowPanels = True

msg = "Order Details Form. You can use this form to enter the details of an order place by a customer."

StatusBarPanel1.Text = msg

mnuorder.Enabled = False

MenuItem1.Enabled = False

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

Case 2

Dim NewMDIChild As New frmEmployeeDetails()

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

StatusBar1.ShowPanels = True

msg = "Employee Details Form. You can use this form to enter the details of an Employee."

StatusBarPanel1.Text = msg

mnuemployee.Enabled = False

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

End Select

End Sub

End Class

Page 41: 02_VB_NET_CG

98 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

mnuorder.Enabled = False

MenuItem1.Enabled = False

StatusBar1.ShowPanels = True

msg = "Order Details Form. You can use this form to enter the details of an order place by a customer."

StatusBarPanel1.Text = msg

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

End Sub

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click

End

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

ToolBar1.ImageList = ImageList1

tbCustomer.ImageIndex = 0

tbOrder.ImageIndex = 1

tbExit.ImageIndex = 2

End Sub

Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick

Select Case ToolBar1.Buttons.IndexOf(e.Button)

Case 0

Dim NewMDIChild As New frmCustomerdetails()

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

StatusBar1.ShowPanels = True

msg = "Customer Details Form. You can use this form to enter the details of a Customer."

StatusBarPanel1.Text = msg

mnucustomer.Enabled = False

Page 42: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 97

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

mnuemployee.Enabled = False

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

End Sub

Private Sub mnudailysales_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnudailysales.Click

StatusBar1.ShowPanels = True

msg = "You have clicked the Daily Sales Report menu option."

StatusBarPanel1.Text = msg

MsgBox("The Daily Sales Report menu has been clicked")

End Sub

Private Sub mnuexit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuexit.Click

End

End Sub

Private Sub mnuprint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuprint.Click

StatusBar1.ShowPanels = True

msg = " You have clicked the Print menu option."

StatusBarPanel1.Text = msg

pdlg.Document = PDocument

Dim result As DialogResult = pdlg.ShowDialog()

If result = Windows.Forms.DialogResult.OK Then

PDocument.Print()

End If

End Sub

Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click

Dim NewMDIChild As New frmOrderdetails()

Page 43: 02_VB_NET_CG

96 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

'Create a new instance of frmCustomerdetails

Dim NewMDIChild As New frmCustomerdetails()

'Set the parent of the MDI child form.

NewMDIChild.MdiParent = Me

'Display the new form.

NewMDIChild.Show()

mnucustomer.Enabled = False

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

End Sub

Private Sub mnuorder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuorder.Click

StatusBar1.ShowPanels = True

msg = "Order Details Form. You can use this form to enter the details of an order place by a customer."

StatusBarPanel1.Text = msg

Dim NewMDIChild As New frmOrderdetails()

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

mnuorder.Enabled = False

MenuItem1.Enabled = False

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

End Sub

Private Sub mnuemployee_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuemployee.Click

StatusBar1.ShowPanels = True

msg = "Employee Details Form. You can use this form to enter the details of an Employee."

StatusBarPanel1.Text = msg

Dim NewMDIChild As New frmEmployeeDetails()

Page 44: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 95

Add the following line in the Dispose() method of the frmEmployeedetails:

Form1.ActiveForm.Menu.MenuItems(0).MenuItems(2).Enabled = True

If Form1.ActiveForm.Menu.MenuItems(0).MenuItems(0).Enabled <>

False And Form1.ActiveForm.Menu.MenuItems(0).MenuItems(1).Enabled <>

False Then

Form1.ActiveForm.Menu.MenuItems(3).Enabled = True

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = True

End If

Add the following lines in the Dispose() method of the frmOrderdetails:

Form1.ActiveForm.Menu.MenuItems(0).MenuItems(1).Enabled = True

Form1.ActiveForm.ContextMenu.MenuItems(0).Enabled = True

If Form1.ActiveForm.Menu.MenuItems(0).MenuItems(0).Enabled <> False And Form1.ActiveForm.Menu.MenuItems(0).MenuItems(2).Enabled <> False Then

Form1.ActiveForm.Menu.MenuItems(3).Enabled = True

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = True

End If

UGP 2

Imports System.Drawing.Printing

Public Class Form1

Inherits System.Windows.Forms.Form

Dim pdlg As New PrintDialog()

Friend WithEvents PDocument As New PrintDocument()

Dim msg As String

Private Sub mnucustomer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnucustomer.Click

StatusBar1.ShowPanels = True

msg = "Customer Details Form. You can use this form to enter the details of a Customer."

StatusBarPanel1.Text = msg

Page 45: 02_VB_NET_CG

94 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Private Sub mnuprint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuprint.Click

pdlg.Document = PDocument

Dim result As DialogResult = pdlg.ShowDialog()

If result = Windows.Forms.DialogResult.OK Then

PDocument.Print()

End If

End Sub

Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click

Dim NewMDIChild As New frmOrderdetails()

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

mnuorder.Enabled = False

MenuItem1.Enabled = False

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

End Sub

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click

End

End Sub

End Class

Add the following line in the Dispose() method of the frmCustomerdetails:

Form1.ActiveForm.Menu.MenuItems(0).MenuItems(0).Enabled = True

If Form1.ActiveForm.Menu.MenuItems(0).MenuItems(1).Enabled <>

False And Form1.ActiveForm.Menu.MenuItems(0).MenuItems(2).Enabled <>

False Then

Form1.ActiveForm.Menu.MenuItems(3).Enabled = True

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = True

End If

Page 46: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 93

mnucustomer.Enabled = False

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

End Sub

Private Sub mnuorder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuorder.Click

Dim NewMDIChild As New frmOrderdetails()

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

mnuorder.Enabled = False

MenuItem1.Enabled = False

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

End Sub

Private Sub mnuemployee_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuemployee.Click

Dim NewMDIChild As New frmEmployeeDetails()

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

mnuemployee.Enabled = False

Form1.ActiveForm.ContextMenu.MenuItems(1).Enabled = False

Form1.ActiveForm.Menu.MenuItems(3).Enabled = False

End Sub

Private Sub mnudailysales_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnudailysales.Click

MsgBox("The Daily Sales Report menu has been clicked")

End Sub

Private Sub mnuexit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuexit.Click

End

End Sub

Page 47: 02_VB_NET_CG

92 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

cmdRead.Enabled = False

cmdWrite.Enabled = True

End Sub

Private Sub cmdReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdReset.Click

rtbPDetails.Text = ""

End Sub

Private Sub frmProductDetails_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

cmdRead.Enabled = False

End Sub

End Class

Save the project by selecting the Save All option from the File menu.

1. Select the Start option from the Debug menu, or press F5.

2. Enter the product details and use the Write Data and Read Data buttons to validate the file I/O operations. Use the Reset button to reset the contents of the RichTextBox control.

Solutions: Unguided Practice

UGP 1

Imports System.Drawing.Printing

Public Class Form1

Inherits System.Windows.Forms.Form

Dim pdlg As New PrintDialog()

Friend WithEvents PDocument As New PrintDocument()

Private Sub mnucustomer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnucustomer.Click

'Create a new instance of frmCustomerdetails

Dim NewMDIChild As New frmCustomerdetails()

'Set the parent of the MDI child form.

NewMDIChild.MdiParent = Me

'Display the new form.

NewMDIChild.Show()

Page 48: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 91

Write the following code in the Code Editor window of the frmProductDetails form:

Public Class frmProductDetails

Inherits System.Windows.Forms.Form

Private Sub cmdWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWrite.Click

FileOpen(1, "c:\Product Details.TXT", OpenMode.Append)

' Open or create file.

PrintLine(1, rtbPDetails.Text) 'Write line in the file

PrintLine(1) 'Insert a blank line after the first line

FileClose(1) ' Close the file

cmdRead.Enabled = True

cmdWrite.Enabled = False

rtbPDetails.Text = ""

End Sub

Private Sub cmdRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRead.Click

Dim TextLine As String

FileOpen(1, "c:\Product Details.TXT", OpenMode.Input)

' Open file to read data from it.

While Not EOF(1) ' Loop until end of file.

TextLine = LineInput(1) ' Read line into variable.

If rtbPDetails.Text = "" Then

rtbPDetails.Text = rtbPDetails.Text + TextLine

' Print to the RichTextBox.

Else

rtbPDetails.Text = rtbPDetails.Text + Chr(13) +

TextLine ' Print to the RichTextBox.

End If

End While

FileClose(1) ' Close the file

Page 49: 02_VB_NET_CG

90 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

You should also have another button to reset the contents of RichTextBox. To indicate the purpose of project, you should name the project as PDetails and set the Name and Text properties of the form as frmProductDetails and Product Details, respectively. The details of the controls that you need to add to the form are given in the following table:

Object Text Name

Label Product details Form lblCaption

RichTextBox Type Product Details Here rtbPDetails

Button Read Data cmdRead

Button Write Data cmdWrite

Button Reset Data cmdReset

As per the above plan, you need to add a RichTextBox control, a label control, and two buttons, Read Data and Write Data, to the form named frmProductDetails. You also need to add another button, Reset, to reset the contents of RichTextBox. The Read Data button should be used to read data from the existing file Product Details.txt, and the Write Data button should be used to write data to the Product Details.txt file.

To ensure that data is first written and then read from the file, initially the Read Data button will be disabled.

To design the form, perform the following steps:

1. Start Microsoft Visual Studio .NET using the Start menu.

2. Select the Project option from the New submenu under the File menu.

3. Ensure that in the New Project dialog box, the Project Types is Visual Basic Projects and the Template is Windows Application. Type PDetails in the Name text box and click the OK button.

4. Right-click the Form1.vb form name in the Solution Explorer window and select the Properties option to display the Properties window.

5. Click the form in the design viewer and set the Name and Text properties of the form in the Properties window, as planned.

6. Right-click the PDetails project name and select the Properties option.

7. Select frmProductDetails as the startup object from the Startup object drop-down list and click the OK button.

8. Add the required controls from the Toolbox and name them, as planned, using the Properties window.

9. Organize the controls.

You will use the FileOpen() function to open Product Details.Txt file or create the file, if it does not exist, so that users at the call centers of Diaz Telecommunications are able to read data from and write data to the file. Since the C drive is the default drive on all computers, you should also ensure that the Product Details.txt file is always saved in the C drive of a computer.

Page 50: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 89

Protected Sub Callthread()

Dim CalcObject As New CalcClass()

CalcObject.breath = 12

CalcObject.length = 12

MyThread.Start()

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Call Callthread()

End Sub

End Class

Class CalcClass

Public length As Double

Public breath As Double

Public area As Double

Sub CalculateArea()

area = length * breath

MsgBox("The area is: " & area)

End Sub

End Class

Ans: Type the declaration of the MyThread variable as:

Dim MyThread As New System.Threading.Thread(AddressOf

CalcObject.CalculateArea)

Solution: Guided Practice As per the problem statement, the users at the call centers of Diaz Telecommunications should be able to create a text file and save product details in it. In addition, after the file is created, the users should also be able to open the file and read data from it. Since data is to be read form or write to the file as a sequence of characters, you should implement the relevant built-in functions of Visual Basic .NET to sequentially access the file.

To ensure user-friendly interface for reading data from and writing data to the Product Details.txt file, you need to plan an appropriate user interface. Since product details could be in multiple lines, you should include a RichTextBox control in place of the usual TextBox control to capture the product details. To describe the use of the RichTextBox control, you should add an appropriate label for it. In addition, to read from and write to the Product Details.txt file, you should add two buttons to the form.

Page 51: 02_VB_NET_CG

88 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

3. Complete the following code to ensure that the file Product.txt is opened with no share specification.

Imports System.IO

Public Class Form1

Inherits System.Windows.Forms.Form

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim fstream As New FileStream("C:\ Product.txt")

End Sub

End Class

Ans: Dim fstream As New FileStream("C:\ Product.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)

4. Complete the following code to display the contents of the file named Product.txt in the output window.

Imports System.IO

Public Class Form1

Inherits System.Windows.Forms.Form

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim len As Integer

FileOpen(1, "C:\Emp_File.txt", OpenMode.Input)

MsgBox(len)

FileClose(1)

End Sub

End Class

Ans: Include the line len = LOF(1)before the Msgbox function.

5. There is a class called CalcClass, which has a sub procedure called CalculateArea(). You need to execute this procedure in a separate thread. To execute the CalculateArea () procedure, you need to declare a variable of the thread type. Complete the declaration of the variable in the following code snippet.

Imports System.Threading.Thread

Public Class Form1

Inherits System.Windows.Forms.Form

Page 52: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 87

2. What is a scripting library and how is it used for files?

Ans: A scripting library is used in previous versions of Visual Basic. This library is used to render object-oriented aspects of file handling.

3. When should I use a thread?

Ans: You should use threads when your application:

Has long computational processes

Communicates over the Internet

Accesses data

Uses Microsoft Message Queue Services

Performs process control

Solutions: Just a Minute… 1. The following code snippet generates a build error. Identify the error.

Public Class Form1

Inherits System.Windows.Forms.Form

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim files As FileStream = New FileStream("c:\Product.txt",

FileMode.OpenOrCreate)

Dim bw As BinaryWriter = New BinaryWriter(files)

Dim br As BinaryReader = New BinaryReader(files)

Dim j, k As Integer

For j = 3 To 9

bw.Write(CStr(j))

Next

br.BaseStream.Seek(0, SeekOrigin.Begin)

TextBox1.Text = br.ReadChars(14)

End Sub

End Class

Ans: You need to import the System.IO namespace using the Imports statement.

2. What is the difference between the CreateNew and Create constants of the FileMode enumeration?

Ans: Both Create and CreateNew constants are used to specify that the operating system create a new file. However, if the file already exists, the Create constant will overwrite the file, whereas the CreateNew constant will throw an exception.

Page 53: 02_VB_NET_CG

86 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click

End

End Sub

Save the project by selecting the Save All option from the File menu.

7. Check the application by executing it.

1. Select the Start option from the Debug menu, or press F5.

2. Open the Customer Details, Order Details, Query Details, and Employee Details forms using the respective menus.

3. Display the message by clicking the Daily Sales Report menu.

4. Terminate the application using the Exit menu.

Lesson Ten

Experiences Start this lesson by asking questions about streams and files. Then, help them connect their existing knowledge about streams and files with the concept of files and streams in Visual Basic .NET. You can simply list the different types of files and streams explained in the lesson and state how to use them. Encourage students to learn about other files on their own.

Threading is a concept that students learned in Semester one. However, it is a complex topic, therefore, you should explain it again. While explaining the concepts, use as many examples as possible. You can use the examples given in the Examples and Analogies section. Create a connect with the concepts learned in earlier semesters, but don’t assume that students will know the topic thoroughly.

It is very important for students to understand that the main method itself is a thread. Tell them that even if they do not create a thread in an application, a primary thread exists.

While discussing SyncLock, list its benefits, such as locking, and disadvantages, such as slowdown of the system. Connect SyncLock with the synchronization of code in Java.

Examples and Analogies You can give the classic example of MS-Word printing a document as well as editing texts.

You can also give a day-to-day example such as of three persons who are building a house. Each person is a thread. When a wall is being built, one of them will lay bricks and apply mortar while the other one will prepare the mortar. At the same time, the third person will transfer the mortar and bricks to the person who is actually using them. Each person is involved in a different task but is actually a part of one activity, which is building a wall. Relate this to the working of threads.

FAQs 1. Why should I use SyncLock sparingly?

Ans: SyncLock reduces the overall performance of a system.

Page 54: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 85

Public Sub mnuprint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuprint.Click

pdlg.Document = PDocument

Dim result As DialogResult = pdlg.ShowDialog()

If result = Windows.Forms.DialogResult.OK Then

Pdocument.Print()

End If

End Sub

End Class

To provide easy access to options, perform the following actions.

1. Click the View Designer button in the Solution Explorer window to display Form1on the screen.

2. Double-click the ContextMenu control in the Toolbox to add the ContextMenu control to Form1.

3. To add menu items to the ContextMenu control, first click the highlighted Context Menu box on the menu bar of the MDI parent form, Form1, and then click the Type Here highlighted box. Type the menu item names as Order and Exit to create two menu options.

4. Invoke the Properties window for the Form1 by right-clicking the Form1.vb label in the Solution Explorer window and selecting the Properties option.

5. Set the ContextMenu property of Form1 to ContextMenu1. This will set the context menu for the MDI parent form, Form1.

6. To ensure that when the context menu items of the Customized Data Entry Application project are clicked, the relevant forms are displayed on the screen, write the code for the Click event of each menu item. The following is the code that you need to write for the Click event of each MenuItem:

Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click

'Create a new instance of frmOrderdetails

Dim NewMDIChild As New frmOrderdetails()

'Set the parent of the MDI child form.

NewMDIChild.MdiParent = Me

'Display the new form.

NewMDIChild.Show()

End Sub

Page 55: 02_VB_NET_CG

84 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

'Set the parent of the MDI child form.

NewMDIChild.MdiParent = Me

'Display the new form.

NewMDIChild.Show()

End Sub

Private Sub mnuorder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuorder.Click

'Create a new instance of frmOrderdetails

Dim NewMDIChild As New frmOrderdetails()

'Set the parent of the MDI child form.

NewMDIChild.MdiParent = Me

'Display the new form.

NewMDIChild.Show()

End Sub

Private Sub mnuemployee_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuemployee.Click

'Create a new instance of frmEmployeedetails

Dim NewMDIChild As New frmEmployeedetails()

'Set the parent of the MDI child form.

NewMDIChild.MdiParent = Me

'Display the new form.

NewMDIChild.Show()

End Sub

Private Sub mnudailysales_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnudailysales.Click

MsgBox("The Daily Sales Report menu has been clicked")

End Sub

Private Sub mnuexit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuexit.Click

End

End Sub

Page 56: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 83

6. Set the IsMdiContainer property of Form1 to True. This will set the Data Entry Form as the MDI Parent form.

7. Set the WindowState property of Form1 to Maximized. Since Main Form is the MDI Parent form within which all the MDI Child forms are to be displayed, you should display the Main Form in the maximized state.

8. Double-click the MainMenu control in the Toolbox to add the control to the component tray of the project.

9. Add the menu items, as planned. To add menu items in the MainMenu object, click the Type Here box on the menu bar of the MDI Parent form, Form1 and type the menu item name. In Visual Basic .NET, the name that you type is set as the value of the Text property of the menu item.

10. To specify the name for each menu item, as planned, you need to open the Properties window. You can open the Properties window by right-clicking the menu item and selecting the Properties option. After the Properties window is displayed, you should specify the name of the individual menu items, as planned.

11. After you have added the menu items to the MDI Parent form, you need to add the MDI Child forms. To add MDI Child forms, you can either create the data entry forms or reuse the forms that you have created in previous sessions. Since, the data entry forms are already created and are available for reuse, you need to add these forms to the MDI Parent form. To add the existing data entry forms, right-click the Customized Data Entry Application project in the Solution Explorer and select the Add Existing Item option from the Add submenu.

12. In the Add Existing Item dialog box, display the Customer_details folder in which the frmCustomerdetails form is saved. Then, double-click the Customer_details folder to display its contents. Next, select the frmCustomerdetails.vb file from the list of files and click the Open button. If the Customer_details project contains the Customer class in a separate class file, you need to add the Customer.vb file by using the Add Existing Item dialog box. Repeat the step to add the class files and forms for Order, and Employee to Customized Data Entry Application.

13. After all the three forms are added to the Customized Data Entry Application project, write code for each of the menu items added to the project. Write the following code snippets in the Code Editor window of the Customized Data Entry Application MDI form.

14. To ensure that when the submenus of the Forms menu are clicked, the relevant forms are displayed on the screen, write code for the Click event of each menu. The following is the entire code that you need to write:

Imports System.Drawing.Printing

Public Class Form1

Inherits System.Windows.Forms.Form

Dim pdlg As New PrintDialog()

Friend WithEvents PDocument As New PrintDocument()

Private Sub mnucustomer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnucustomer.Click

'Create a new instance of frmCustomerdetails

Dim NewMDIChild As New frmCustomerdetails()

Page 57: 02_VB_NET_CG

82 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Use menus to allow the users to access the required parts of the application. The menu items identified should be assigned proper names, as given below.

Purpose Name Text Level Grouped Under

The Parent Form mnuforms &Forms 1

Customer Details mnucustomer &Customer Details 2 mnuforms

Order Details mnuorder &Order Details 2 mnuforms

Employee Details mnuemployee &Employee Details 2 mnuforms

Report mnureport &Report 1

Daily Sales Report mnudailysales & Daily Sales Report 2 mnureport

Invoke Print Dialog Box mnuprint &Print 1

Quit the application mnuexit &Exit 1

The levels specified above indicate the top-level menu and the submenu. The menu items with level 2 are submenus under the relevant groups. The menu items with level 1 are the top-level menus that appear in the menu bar.

An MDI form, which will act as a container for the application, will be required.

In Visual Basic .NET, you can integrate different parts of an application by implementing menus to the form.

The menus can be organized as shown below:

To integrate the application, perform the following steps:

1. Start Microsoft Visual Studio .NET using the Start menu.

2. Select the Project option from the New submenu under the File menu.

3. Ensure that in the New Project dialog box, the Project Types is Visual Basic Projects and the Template is Windows Application. Type Customized Data Entry Application in the Name text box and click the OK button.

4. Right-click the Form1.vb form in the Solution Explorer window and select the Properties option to display the Properties window.

5. Specify Main Form as the value for the Text property of the Form1 in the Properties window.

Data Entry

Daily Sales

Employee _Details

Order Details

Customer Details

Report Print Exit

Page 58: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 81

Complete the code for the following Form1_Load Sub procedure to assign appropriate image to each ToolBar button.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

ToolBar1.ImageList = ImageList1

End Sub

Ans: To assign an appropriate image to each Toolbar button, include the following assignment statements after the ImageList property assignment statement:

tbProduct.ImageIndex = 0

tbCustomer.ImageIndex = 1

tbSales.ImageIndex = 2

tbExit.ImageIndex = 3

7. Fill in the blank:

The _______ property of StatusBar enables you to specify the message that will be displayed in the StatusBar panel.

Ans: text

8. You have added a panel in StatusBar1. How would you ensure that the panel size would be adjusted based on the size of the text it will hold?

Ans: Set the AutoSize property of the panel to Contents.

Solution: Guided Practice

9.P.1 Note: Use the forms Customer, Order, Query, and Employee created in Lesson3 and Lesson4 for

this demo.

As per the problem statement, you need to integrate three data entry forms. You also need to provide options to access the daily sales report and invoke the Print dialog box. In addition, you need to include an Exit option to the users.

To integrate data entry forms and to provide options to access the daily sales report and invoke the Print dialog box, you need to create an MDI application and add menu to the MDI Parent form so that users can switch between the forms and report. The menu should also include an option to invoke the Print dialog box.

Page 59: 02_VB_NET_CG

80 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

3. In an MDI application, you need to ensure that when the Product menu option is clicked, the Product form is displayed. Complete the code to display the Product form.

Public Class Form1

Inherits System.Windows.Forms.Form

Private Sub Product_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Product.Click

Dim NewMDIChild As New frmformdetails()

End Sub

End Class

Ans: You need to add the following lines after the NewMDIChild declaration:

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

4. You have added a ContextMenu control to a Windows form. The ContextMenu control has the default name ContextMenu1. You have added three MenuItems named Product, Customer, and Sales to the ContextMenu1. How would you ensure that the MenuItems added to the ContextMenu1 would be display when a user right-clicks the Windows form?

Ans: You need to change the ContextMenu property of the Windows form from none to ContextMenu1.

5. Fill in the blank:

You can add buttons to a ToolBar control by accessing the _____________________ editor.

Ans: ToolBarButton Collection

6. You have added a ToolBar control and an ImageList control to the form, Form1. You have added four buttons to the ToolBar1 and four .bmps to the ImageList1.You need to specify the images for each of the toolbar buttons based on the following table:

Toolbar Button Name ImageName Position of the image in the ImageList collection

TbProduct ProductImage 0

TbCustomer CustomerImage 1

TbSales SalesImage 2

TbExit ExitImage 3

Page 60: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 79

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

Me.ActiveForm.Controls(0).Text = "Text of the TextBox1 control has been changed"

End Sub

22. Execute the application using the F5 key.

23. Click the Childform menu option to display the Childform form and verify if the text of the status bar panel changes as you type characters in the TextBox1 control.

FAQs 1. What is the difference between MDI forms in Visual Basic .NET and previous versions?

Ans: Two differences between MDI forms in Visual Basic .NET and previous versions are:

1. In the previous versions of Visual Basic, MDI forms can contain controls that have the align property. In Visual Basic .NET an MDI form can contain any control.

2. In the previous version of Visual Basic .NET, you can have only one MDI parent form. In Visual Basic .NET, you can have multiple MDI parent forms. However, no form can simultaneously be a MDI parent form and a MDI child form.

2. How will you add a menu item dynamically?

Ans: You can add a menu item dynamically by performing the following steps:

1. Drag a MenuItem control to a Form. By default, it is named as MenuItem1.

2. Add the following code to add a menuitem at run time:

Dim NewMenuItem As MenuItem()

NewMenuItem.Text=”New Menu Item”

MenuItem1.MenuItems.Add(NewMenuItem)

3. How will you add a submenu in an MDI form to list the MDI child forms currently loaded?

Ans: You can do this using the MDIList property of the MenuItem object.

Solutions: Just a Minute… 1. How can you specify a Windows Form to be an MDI Parent form?

Ans: You need to set the IsMDIContainer property of the form to True to specify a Windows Form as an MDI Parent form.

2. Fill in the blank:

______________ objects are added to the ____________ collection to include menu options to a Windows form.

Ans: MenuItem, MainMenu.

Page 61: 02_VB_NET_CG

78 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Steps to add Messages from a Child form to an MDI Parent Form:

1. Start Microsoft Visual Studio .NET using the Start menu.

2. Select the Project option from the New submenu under the File menu.

3. Ensure that in the New Project dialog box, Project Types is Visual Basic Projects and Template is Windows Application. Type Status_bar in the Name text box and click the OK button.

4. Double-click the StatusBar control in the Toolbox to add the control to Form1.

5. Right-click StatusBar1 and selecting Properties option from the short-cut menu.

6. Specify the Text property of the StatusBar1 as Form1 is Displayed.

7. Right-click the Form1 and select Properties option from the short-cut menu.

8. Set IsMdiContainer property to True.

9. Double-click the MainMenu control in the Toolbox to add the control to Form1.

10. Add a menu item named Childform to the MDI Parent form, Form1.

11. Select Add Windows Form from the Project menu.

12. Specify the name of the form as childform and click the Open button.

13. Add a TextBox control to the childform.

14. Right-click TextBox1 and select the Properties option from the short-cut menu.

15. Clear the content of the Text property of TextBox1 control.

16. Select Form1 in the Solution Explorer and select the View Designer icon.

17. Double-click the menu item Childform to display the Code Editor window.

18. In the click() event of MenuItem1, write the following lines of code:

Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click

Dim NewMDIChild As New childform()

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

End Sub

19. Select childform in the Solution Explorer and select the View Designer icon.

20. Double-click the TextBox1 control to display the Code Editor window.

21. In the TextChanged() event of TextBox1, write the following code:

Page 62: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 77

Replace the code for the Next button:

’Increases the position of the CurrencyManager by 1.

OleDbDataAdapter1.Fill(DataSet11)

bm.Position + = 1

Replace the code for the Previous button:

’Decreases the position of the CurrencyManager by 1.

OleDbDataAdapter1.Fill(DataSet11)

bm.Position - = 1

Replace the code for the First button:

’Sets the position of the CurrencyManager to 0. The CurrencyManager position starts from 0, the value 0 depicting the first record.

OleDbDataAdapter1.Fill(DataSet11)

bm.Position = 0

Replace the code for the Last button:

’Sets the position of the CurrencyManager to 1 less than the CurrencyManager count i.e. the total number of records in the list.

OleDbDataAdapter1.Fill(DataSet11)

bm.Position = bm.Count-1

Lesson Nine

Experiences Tell students very briefly about menus and their types. Then, explain MDI applications. You can use Microsoft Word and Notepad as examples to explain MDI applications. You can then explain the technicalities of an MDI application in details.

While teaching the ToolBar and ImageList controls, tell students that a button or a list box is a control. They have used these controls earlier and, therefore, will be able to relate easily. You need not explain controls in detail, as students would learn about controls in subsequent lessons.

Additional Inputs You can also display user-defined messages in the panel of a status bar that is added to the MDI Parent form from a MDI Child form. The following example illustrates the steps that you need to implement to display user-defined messages in the panel of a status bar that is added to a MDI Parent form. To execute the following code, you need to have two forms, named Form1 and childform.

Page 63: 02_VB_NET_CG

76 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

dr(3) = TextBox4.Text

dr(4) = TextBox5.Text

dr(5) = TextBox6.Text

t1.Rows.Add(dr)

ElseIf flag = 3 Then

t1 = DataSet11.Tables("CustomerTracking")

dr = t1.Rows.Find(custid)

dr.BeginEdit()

dr(0) = custid

dr(1) = TextBox2.Text

dr(2) = TextBox3.Text

dr(3) = TextBox4.Text

dr(4) = TextBox5.Text

dr(5) = TextBox6.Text

dr.EndEdit()

TextBox1.Enabled = True

TextBox2.Enabled = True

TextBox6.Enabled = True

ElseIf flag = 2 Then

dr.Delete()

End If

flag = 0

OleDbDataAdapter1.Update(DataSet11, "CustomerTracking")

OleDbDataAdapter1.Fill(DataSet11)

bm.Position=0

8. Write the following code for the Load event of the form:

bm = Me.BindingContext(DataSet11, “CustomerTracking”)

bm.Position = 0

Page 64: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 75

5. Replace the code for the Click event of the Delete button with the following code:

custid = TextBox1.Text

t1 = DataSet11.Tables("CustomerTracking")

dr = t1.Rows.Find(custid)

flag = 2

6. Replace the code for the Click event of the Modify button with the following code:

TextBox1.Enabled = False

TextBox2.Enabled = False

custid = TextBox1.Text

flag = 3

7. Replace the code for the Click event of the Save button with the following code:

If flag = 1 Then

If TextBox2.Text = "" Then

MsgBox("The customer's first name cannot be left blank. Please enter the Employee Name", MsgBoxStyle.OKOnly, "Incomplete Information")

TextBox2.Focus()

Exit Sub

ElseIf TextBox4.Text = "" Then

MsgBox("The customer's address cannot be left blank.", MsgBoxStyle.OKOnly, "Incomplete Information")

TextBox4.Focus()

Exit Sub

End If

t1 = DataSet11.Tables("CustomerTracking")

dr = t1.NewRow()

dr(0) = TextBox1.Text

dr(1) = TextBox2.Text

dr(2) = TextBox3.Text

Page 65: 02_VB_NET_CG

74 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

3. Write the following code for the Load event of the form:

bm = Me.BindingContext(DataSet11, "CustomerTracking")

OleDbDataAdapter1.Fill(DataSet11)

4. Replace the code for the Click event of the Add button with the following code:

TextBox1.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

TextBox4.Text = ""

TextBox5.Text = ""

TextBox6.Text = ""

flag = 1

Dim ctr, len As Integer

Dim custidval As String

t1 = DataSet11.Tables("CustomerTracking")

len = (t1.Rows.Count - 1)

dr = t1.Rows(len)

custid = dr("CustID")

custidval = Mid(custid, 2, 3)

ctr = CInt(custidval)

If ctr >= 1 And ctr < 9 Then

ctr = ctr + 1

TextBox1.Text = "C00" & ctr

ElseIf ctr >= 9 And ctr < 99 Then

ctr = ctr + 1

TextBox1.Text = "C0" & ctr

ElseIf ctr >= 99 Then

ctr = ctr + 1

TextBox1.Text = "C" & ctr

End If

TextBox1.Enabled = False

Page 66: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 73

7. The information under the Fields tab is displayed. All the fields of the QueryHandling table are displayed in the Available Fields list. To insert a field in the Crystal Report, select the field and click Add. In this case, click Add All to insert all the fields in the Crystal Report and click Next.

8. The information under the Group tab is displayed. You can select the field on which you want to group the data in the Crystal Report and click Add. In this case, select QueryHandling.Sub_Date from the Available Fields list and click Add. The QueryHandling.Sub_Date field is included in the Group By list.

9. In the Break list box, you can specify the break for grouping the data. For example, you can group data on a monthly basis, weekly basis, or daily basis. Select the for each week. option from the Break list box to group and display data on a weekly basis and click Next.

10. On the Total tab, do not change the default option in the Summary Type list box and click Next.

11. On the TopN tab, click Next.

12. On the Chart tab, click Next.

13. On the Select tab, click Next.

14. Under the Style tab, enter Employee Performance in the Title text box and click Finish.

15. Open the Form Designer and drag a CrystalReportViewer control from the Windows Forms tab of the Toolbox.

16. Resize the CrystalReportViewer control so as to display all the data at run time.

17. Write the following code in the Click event of the Show Revenue Report button:

CrystalReportViewer1.ReportSource= “D:\Visual Project\WindowsApp\CrystalReport1.rpt”

The actual path will vary according to the path where the project is saved.

18. Write the following code in the Click event of the Show Employee Performance Report button:

CrystalReportViewer1.ReportSource= “D:\Visual Project\WindowsApp\CrystalReport2.rpt”

19. Run the application.

Note: Ask the students to save the application in the Home Directory as the same application would be used for 11.P.1

UGP 2

The correct code is as follows:

1. Open the application CustomerDetails.

2. Add the following form-level declaration:

Dim bm as BindingManagerBase

Page 67: 02_VB_NET_CG

72 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

10. Under the Data tab, the Available data sources pane displays the connection and the corresponding database, which you created by following the above steps. Click the plus sign next to the database name CallCenter11. The existing tables in the database CallCenter11 are displayed.

11. Select the CustOrder table and click Insert Table to insert the table in the Crystal Report. Then, click Next.

12. The information under the Fields tab is displayed. All the fields of the CustOrder table are displayed in the Available Fields list. To insert a field in the Crystal Report, select the field and click Add. In this case, click Add All to insert all the fields in the Crystal Report and click Next.

13. The information under the Group tab is displayed. You can select the field on which you want to group the data in the Crystal Report and click Add. In this case, select CustOrder.Date from the Available Fields list and click Add. The CustOrder.Date field is included in the Group By list.

14. When the CustOrder.Date field is inserted in the Group By list, a Sort Order and a Break list box is displayed below the Group By list. You can use the Sort Order list box to select the method to sort the data. For example, you can specify the data to be displayed in an ascending order, descending order, original order (in the same order as it exists in the database), or in a specified order, where you can select the fields in the order in which they would be displayed. By default, in ascending order. option is selected in the Sort Order list box. Do not change the default option.

15. In the Break list box, you can specify the break for grouping the data. For example, you can group data on a monthly basis, weekly basis, or daily basis. Select the for each week. option from the Break list box to group and display data on a monthly basis and click Next.

16. Under the Total tab, do not change the default option in the Summary Type list box and click Next.

17. Under the TopN tab, click Next.

18. Under the Chart tab, click Next.

19. Under the Select tab, click Next.

20. Under the Style tab, enter Week-Wise Revenue in the Title text box and click Finish.

Create another report by performing the following steps:

1. Right-click the Project name in the Solution Explorer window and point to Add from the shortcut menu. Then, click Add New Item from the Add submenu.

2. The Add New Item - <Application name> dialog box is displayed. Select Crystal Report from the Templates pane in the right side of the Add New Item – <application name> dialog box.

3. By default, the Crystal Report is named as CrystalReport2.rpt. Click Open. Crystal Report Gallery is displayed.

4. Then, select the Using the Report Expert option from Crystal Report Gallery and click OK.

5. On the Data tab, the Available data sources pane displays the connection and the corresponding database, which you created by following the above steps. Click the plus sign next to the database name CallCenter11. The existing tables in the database CallCenter11 are displayed.

6. Select the QueryHandling table and click Insert Table to insert the table in the Crystal Report. Then, click Next.

Page 68: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 71

17. Under the Customize Style tab, click Next.

18. Under the Chart tab, click Next.

19. Under the Select tab, select QueryHandling.Sub_Date from the Available Fields list and click the Add-> button to add the field in the Select Fields list.

20. In the list box below the Select Fields list, is any value. option is selected by default. Select is greater than from the list box.

21. After is greater than is selected in the list box, a combo box is displayed, where you can specify the criterion. Select 7/9/2001 12:00:00AM from the combo box and click Finish.

22. Save the Crystal Report by using the File Save CrystalReport1.rpt option.

23. Open the Form Designer window and drag a CrystalReportViewer control from the Windows Forms tab of the Toolbox.

24. Resize the CrystalReportViewer control so as to display all the data at run time.

25. Open the Properties window for the CrystalReportViewer control and click the ReportSource property.

26. Select Browse from the drop-down list and select CrystalReport1 in the Open an Existing Crystal Report dialog box. Then, click Open.

27. Run the application.

Solution: Unguided Practice

UGP 1

1. Create a new Windows Application project. Form1 is added to the application by default.

2. Drag two Button controls from the Windows Forms tab of the Toolbox into the form and set the their Text property to Show Revenue Report and Show Employee Performance Report, respectively.

3. Right-click on the Project name in the Solution Explorer window and point to Add from the shortcut menu. Then, click Add New Item from the Add submenu.

4. The Add New Item - <Application name> dialog box is displayed. Select Crystal Report from the Templates pane in the right side of the Add New Item – <Application name> dialog box.

5. By default, the Crystal Report is named as CrystalReport1.rpt. Click Open. Crystal Report Gallery is displayed.

6. Then, select the Using the Report Expert option from Crystal Report Gallery and click OK.

7. Expand the OLE DB (ADO) folder in the Available data sources list and then select Microsoft OLE DB Provider for SQL Server from the Provider list. Click Next.

8. Provide the information, such as the server name to connect, the user ID and password for connecting with the server, and the database name as CallCenter11. Click Next.

9. Click Finish in the Advanced Information screen.

Page 69: 02_VB_NET_CG

70 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

8.UGP.1

Before running 8.UGP.1, perform the following steps:

1. Copy the project folders in the local machine.

2. Open the Code Editor window for the form.

3. Change the code for the Click event of both the buttons to:

CrystalReportViewer1.ReportSource =<path of the crystal report file eg. C:\My Documents\8.D.1\CrystalReport1.rpt>

Solution: Guided Practice

8.P.1

1. Create a new Windows Application project. Form1 is added to the application by default.

2. Click File from the menu bar. Then, select Add New Item from the File menu.

3. Select Crystal Report from the Templates pane of the Add New Item – <application name> dialog box and click Open.

4. In the Crystal Report Gallery, the Using the Report Expert radio button is selected by default. Select the Cross-Tab expert from the Choose an Expert list and click OK.

5. Under the Data tab, expand the OLE DB (ADO) folder. In the ADO DB (ADO) dialog box, select Microsoft OLE DB Provider for SQL Server from the Provider list. Click Next.

6. Provide the information, such as the server name to connect, the user ID and password for connecting with the server and enter CallCenter11 in the Database combo box. Click Next.

7. Click Finish in the Advanced Information screen.

8. Expand CallCenter11 database in the Available data sources list.

9. Select the QueryHandling table from the Available data sources list and click the Insert Table button. Then, click Next.

10. The information under the Cross-Tab tab is displayed. Select EmpID in the Available Fields list and click Add Column button.

11. Select QID in the Available Fields list and click Add Row button.

12. Select Sub_Date in the Available Fields list and click Add Row button.

13. Select Feedback in the Available Fields list and click Add Summarized Field button.

14. Click the Change Summary button. In the Change Summary dialog box, select average from the list box and click OK.

15. Click Next.

16. Under the Style tab, do not change the default style and click Next.

Page 70: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 69

Explain the toolbar icons of the Windows Forms Viewer by creating a simple Windows Form and adding a CrystalReportViewer control, as shown below:

A Sample Windows Form

Additional Inputs

Demos and Practices

The solutions for demos, guided practices, and unguided practices for this lesson are stored in the Solutions\Lesson8 folder. To execute the demos, guided practices, and unguideded practices, perform the following steps:

1. Copy the project folders in the local machine.

2. Open the Properties window for the HelpProvider control.

3. Set the HelpNameSpace property to the path where the Crystal Report file is present (eg. C:\My Documents\8.D.1\CrystalReport1.rpt).

Note: 8.D.1 will be used for 12.UGP.1.

8.D.2

8.D.2 requires ADO.NET connectivity. Therefore, follow the steps given for Lesson Five before running the application.

Page 71: 02_VB_NET_CG

68 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

For the First button:

’Sets the position of the CurrencyManager to 0. The CurrencyManager position starts from 0, the value 0 depicting the first record.

OleDbDataAdapter1.Fill(DataSet11)

bm.Position = 0

For the Last button:

’Sets the position of the CurrencyManager to 1 less than the CurrencyManager count i.e. the total number of records in the list.

OleDbDataAdapter1.Fill(DataSet11)

bm.Position = bm.Count-1

Note: Ask the students to save the application in the Home Directory as it will be used for 12.P.1.

Lesson Eight

Experiences While discussing the data access model of Crystal Reports, explain to students that the Pull method is widely used to access data from a database, because this method ensures fast data access.

Windows Forms Viewer is an important concept as it allows viewing a Crystal Report in a windows application. Discuss Windows Forms Viewer and the CrystalReportViewer control in detail, as students might get confused initially.

Page 72: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 67

Exit Sub

ElseIf TextBox6.Text = "" Then

MsgBox("The customer's email address cannot be left blank.", MsgBoxStyle.OKOnly, "Incomplete Information")

TextBox6.Focus()

Exit Sub

End If

t1 = DataSet11.Tables("CustomerTracking")

dr = t1.NewRow()

dr(0) = TextBox1.Text

dr(1) = TextBox2.Text

dr(2) = TextBox3.Text

dr(3) = TextBox4.Text

dr(4) = TextBox5.Text

dr(5) = TextBox6.Text

t1.Rows.Add(dr)

End If

Code for the Load event of the Form:

bm = Me.BindingContext(DataSet11, “CustomerTracking”)

bm.Position = 0

For the Next button:

’Increases the position of the CurrencyManager by 1.

OleDbDataAdapter1.Fill(DataSet11)

bm.Position + = 1

For the Previous button:

’Decreases the position of the CurrencyManager by 1.

OleDbDataAdapter1.Fill(DataSet11)

bm.Position - = 1

Page 73: 02_VB_NET_CG

66 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

4. Use the forms Customer, Order, Query, and Employee created in Lesson3 and Lesson4 for this demo. Write the following code for the Click event of the Delete button:

custid = TextBox1.Text

t1 = DataSet11.Tables("CustomerTracking")

dr = t1.Rows.Find(custid)

flag = 2

5. Write the following code for the Click event of the Modify button:

TextBox1.Enabled = False

custid = TextBox1.Text

flag = 3

6. Write the following code for the Click event of the Save button:

If flag = 1 Then

If TextBox2.Text = "" Then

MsgBox("The customer's first name cannot be left blank. Please enter the Employee Name", MsgBoxStyle.OKOnly, "Incomplete Information")

TextBox2.Focus()

Exit Sub

ElseIf TextBox3.Text = "" Then

MsgBox("The customer's last name cannot be left blank.", MsgBoxStyle.OKOnly, "Incomplete Information")

TextBox3.Focus()

Exit Sub

ElseIf TextBox4.Text = "" Then

MsgBox("The customer's address cannot be left blank.", MsgBoxStyle.OKOnly, "Incomplete Information")

TextBox4.Focus()

Exit Sub

ElseIf TextBox5.Text = "" Then

MsgBox("The customer's phone number cannot be left blank.", MsgBoxStyle.OKOnly, "Incomplete Information")

TextBox5.Focus()

Page 74: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 65

3. Write the following code for the Click event of the Add button:

TextBox1.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

TextBox4.Text = ""

TextBox5.Text = ""

TextBox6.Text = ""

flag = 1

Dim ctr, len As Integer

Dim custidval As String

t1 = DataSet11.Tables("CustomerTracking")

len = (t1.Rows.Count - 1)

dr = t1.Rows(len)

custid = dr("CustID")

custidval = Mid(custid, 2, 3)

ctr = CInt(custidval)

If ctr >= 1 And ctr < 9 Then

ctr = ctr + 1

TextBox1.Text = "C00" & ctr

ElseIf ctr >= 9 And ctr < 99 Then

ctr = ctr + 1

TextBox1.Text = "C0" & ctr

ElseIf ctr >= 99 Then

ctr = ctr + 1

TextBox1.Text = "C" & ctr

End If

TextBox1.Enabled = False

This code displays blank controls in the Form so that the user can enter values for the new record. A flag is created to identify the action performed by the user before the Save button is clicked.

Page 75: 02_VB_NET_CG

64 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

To connect to the database, perform the following steps: 1. Create a data adapter named OleDbDataAdapter1 for the connection through Data Adapter

Configuration Wizard. a. On the second screen of the wizard, connect to the database CallCenter11.

b. In the third screen of the wizard, choose the Use SQL statements option as the method of retrieving data and click Next.

c. In the fourth screen, click Query Builder button. In Query Builder, add the table CustomerTracking and then select the ( All Columns) check box to select all its columns.

The query generated in the third pane of the Query Builder would resemble the one shown below:

SELECT CustomerTracking.*

FROM Employees

2. Generate a new dataset DataSet1 for OleDbDataAdapter1.

3. Make the Text property blank for all the TextBox controls. When the Text property under the DataBindings category in the Properties window is clicked, a down arrow is displayed. Clicking on the down arrow displays a list of datasets and the corresponding tables. The tables contain the existing column names. The column names to be selected from the table CustomerTracking for the Text property of each of the TextBox controls are specified in the following table:

TextBox Text Property

TextBox1 CustID

TextBox2 FName

TextBox3 LName

TextBox4 Address

TextBox5 Phone

TextBox6 email

To maintain the data, perform the following steps:

1. Make the following form-level declarations:

Dim flag as integer

Dim custid as string

Dim dr as DataRow

Dim t1 As DataTable

Dim bm as BindingManagerBase

2. Write the following code for the Load event of the Form:

OleDbDataAdapter1.Fill(DataSet11)

This statement will fill the dataset DataSet11 with the table values.

Page 76: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 63

3. Set the Text property for the Label controls as shown in the following table:

Label Text Property

Label1 Customer ID

Label2 First Name

Label3 Last Name

Label4 Address

Label5 Phone

Label6 email

4. Drag eight Button controls to the Form. The Text property under the Appearance category in the Properties window needs to be set, as displayed in the following table:

Button Text Property Function

Button1 First To display the first record of the dataset

Button2 Previous To display the next record of the dataset

Button3 Next To display the previous record of the dataset

Button4 Last To display the last record of the dataset

Button5 Add To display an empty record where a user can enter values

Button6 Modify To allow the user to modify a record

Button7 Delete To allow a user to delete a record

Button8 Save To save the action performed by the user into the database. Whenever a user adds, modifies, or deletes a record, the database will be updated only when this button is clicked

A sample Windows Form designed by implementing the above given steps is shown in the following figure:

Page 77: 02_VB_NET_CG

62 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

To access data that is not appropriate for storing data in a dataset, such as the data with a short life cycle. For example, retrieving data about daily transactions may not be needed to be stored in a dataset

To access read-only data, which will not be updated

5. Write a code to connect to a database through data commands?

Ans: The code to connect to a database through data commands is as follows:

Dim Str1 as String = “provider=sqloledb;user id=sa;password=;database=CallCenter12;server=DEVSERVER”

Dim Str2 as New OleDb.OleDbConnection(str1)

Str2.Open()

6. What is the difference between the concurrency control through Saving All method and the Version Number method?

Ans: In the Version Number method, when the record is read, a DateTimeStamp or a version number column is saved on the client. The data is updated only if the saved DateTimeStamp matches the DateTimeStamp on the record while in the Saving All method, when the retrieved data is changed in the dataset, the dataset stores both the original and the current versions of the data. While updating the database, the original version of the records is compared to the records in the database.

Solution: Guided Practice

7.P.1

The data to be displayed:

CustID

Fname

LName

Address

Phone

email

1. Create a new Visual Basic Windows Application project by clicking the New Project button in the Microsoft Development Environment [design] - Start Page. Form1 is added to the project by default.

2. From the Windows Forms tab of the Toolbox, drag eight Label controls and eight TextBox controls to display the values from the columns EmpID, EFirstName, ELastName, Address, Age, D_Join, Dept, and Salary.

Page 78: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 61

After this, the first user tries to change the value of Salary to 3750.

Column Original Value Current Value Value in the Database

EmpID E002 E002 E002

EmpName Collin Miller Collin

Salary 3200 3750 3500

At this point, the first user encounters an error since the record that the user had retrieved from the database does not match with the database record. Therefore, optimistic concurrency control does not allow a user to change a record if that record has been changed after the user retrieves it.

Additional Inputs The solutions for demos and guided practices for this lesson are stored in the Solutions\VB.NET\Lesson7 folder.

FAQ 1. Can we combine data from two different datasets into one dataset?

Ans: Yes. You can copy records from one dataset into another dataset by using the Merge() method of the target dataset( the dataset into which the records are to be copied) and passing it to the dataset from which the records are to be copied.

Solutions: Just A Minute… 1. What are the events raised at the time of data updation?

Ans: The events raised at the time of data updation are:

ColumnChanging

RowChanging

ColumnChanged

RowChanged

2. When does the RowState property have the value Detached?

Ans: The RowState property has value Detached between the time that it is created till it is added to a collection, or if it has been removed from a collection.

3. What is the relationship between the RowState property and the DataRowVersion enumeration?

Ans: When changes have been made to a row and the data source has to be updated, the RowState property tells you about the state of the dataset as represented by any of the four constants of the DataRowVersion enumeration.

4. In which cases, direct data update is preferred to updates through datasets?

Ans: Direct data updates are generally used in the following cases:

To work with stored procedures that return a result set, which can be manipulated

Page 79: 02_VB_NET_CG

60 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

3. While configuring the data adapter, in the third pane of the Query Builder, add the following line to the query:

Where ProdID = ‘P011’

Code for the Click event of the Display button:

OleDbDataAdapter1.Fill(DataSet11)

Other steps remain the same.

Lesson Seven

Experiences Introduce the concept of data updating data in present scenario where applications should allow users to add, modify, and delete data from the database without explicitly giving database commands.

While discussing cached and direct data updates, explain to the students that in both the cases the database is updated through database commands. The difference is that in cached data updates, the user need not give data update commands explicitly, whereas in case of direct data updates, the user needs to give commands to update the database.

Explain the concept of optimistic concurrency control by giving the following example:

A table Employees is present in a database. Suppose the first user reads a record with the following values

EmpID EmpName Salary

E002 Collin 3200

Column Original Value Current Value Value in the Database

EmpID E002 E002 E002

EmpName Collin Collin Collin

Salary 3200 3200 3200

Immediately after that, the second user reads the same record.

Then, the second user changes Salary from 3200 to 3500 and tries to update the database.

Column Original Value Current Value Value in the Database

EmpID E002 E002 E002

EmpName Collin Collin Collin

Salary 3200 3500 3200

The user is able to update the database since the original value retrieved by the user matches the value in the database.

Page 80: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 59

1. Open the application EmployeeData.

2. Right-click OleDbDataAdapter2 from the component tray and select Configure Data Adapter from the shortcut menu.

3. On the fourth screen of the wizard, click the Query Builder button.

4. Add the QueryHandling table and then select its the columns (including EmpID) for generating the SQL statement. Then, click OK.

5. Click Next and then click Finish to complete the wizard.

6. Right-click any of the data adapters in the component tray and select Generate Dataset from the shortcut menu.

7. In the Generate Dataset dialog box, select the New radio button containing the name DataSet1.

8. Ensure that both the tables are selected under the Choose which table(s) to add to the dataset list and click OK.

9. Open the file DataSet1.xsd from the Solution Explorer window.

10. From the XML Schema tab of the Toolbox, drag a Relation object to the Employee table.

11. Set the following options in the Edit Relation dialog box:

Name: EmployeesQueryhandling

Parent Element:Employees

Child Element: QueryHandling

Key Fields: EmpID

Foreign Key Fields: EmpID

11. Bind the DataGrid control by setting the DataSource property to DataSet11 and the DataMember property to Employees EmployeesQueryHandling.

12. Bind the ListBox control by setting the DataSource property to DataSet11 and DisplayMember property to Employees.EmpID.

13. Write the following code for the Load event for the Form:

OleDbDataAdapter1.Fill(Dataset11, “Employees”)

OleDbDataAdapter2.Fill(Dataset11, “QueryHandling”)

UGP 3

Open the application ProductDetails.

1. Remove the dataset on the component tray. Also remove the Dataset1.xsd.

2. Right-click OleDbDataAdapter1 and select Configure Data Adapter from the shortcut menu.

Page 81: 02_VB_NET_CG

58 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

15. Write the following code for the Load event of Form1.

OleDbDataAdapter1.Fill(Dataset11)

Code for the Load event of Form1:

bm = Me.BindingContext(DataSet11, “CustOrder”)

bm.Position = 0

Code for the Next button:

’Increases the position of the CurrencyManager by 1.

bm.Position + = 1

Code for the Previous button:

’Decreases the position of the CurrencyManager by 1.

bm.Position - = 1

Code for the First button:

’Sets the position of the CurrencyManager to 0. The CurrencyManager position starts from 0, the value 0 depicting the first record.

bm.Position = 0

Code for the Last button:

’Sets the position of the CurrencyManager to 1 less than the CurrencyManager count i.e. the total number of records in the list.

bm.Position = bm.Count - 1

UGP 2

Data to be displayed:

QID

Sub_Date

Cust_Name

Emp_ID

Date

Status

Feedback

Page 82: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 57

A sample Windows Form designed by following the above steps is shown in the figure below.

To bind the data to the controls, follow the given steps:

13. For a TextBox control, when the Text property under the DataBindings category is clicked, a down arrow is displayed. Clicking on the down arrow displays the list of datasets and corresponding tables. The tables contain the existing column names. The column names to be selected from the table CustOrder for the Text property of each of the TextBox controls are given below:

TextBox Text Property

TextBox1 Inv

TextBox2 Date

TextBox3 CustID

TextBox4 ProdID

TextBox5 Cost

TextBox6 Advance

TextBox7 Profit

14. Make the following general level declaration:

Dim bm as BindingManagerBase

Page 83: 02_VB_NET_CG

56 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

5. In the first column of the first blank line of the table grid, select the element option from the drop-down list.

6. In the next column in the same line, enter Profit as name for the column.

7. In the last column of the line, select integer as the data type for the column from the drop-down list.

8. Select the new column in the table grid. Click View from the menu bar. Then, select Properties Window from the View menu. Enter the following expression in the Expression property for the column:

Cost-2500

9. Save and close DataSet1.xsd.

10. Select OleDbDataAdapter1 from the component tray.

11. Select Data from the menu bar and then select the Preview Data option from the displayed list.

12. The Data Adapter Preview window is displayed. Select OleDbDataAdapter1 from the Data adapters list box.

13. By default, the target dataset is DataSet1. Click the Fill Dataset button to fill the dataset created with the records from the CustOrder table.

14. The records from the CustOrder table are displayed in a tabular format in the Results pane of the Data Adapter Preview window. Click Close to close the Data Adapter Preview window.

Design a Windows Form to display data by performing the following steps:

1. Select View from the menu bar and then select Toolbox from the View menu. The Toolbox is displayed on the left of the window.

2. From the Windows Forms tab of the Toolbox, drag seven Label controls and seven TextBox controls to display the values from the Inv, Date, CustID, ProdID, Cost, and Profit columns.

3. Set the Text property for the Label controls, as shown in the following table:

Label Text property

Label1 Invoice

Label2 Date

Label 3 Customer ID

Label 4 Product ID

Label 5 Cost

Label 6 Advance

Label 7 Profit

4. Drag four Button controls to the Form. The function of each Button control and the Text property to be set for each button is displayed in the following table.

Button Text property Function

Button1 First To display the first record of the dataset.

Button2 Previous To display the next record of the dataset

Button3 Next To display the previous record of the dataset

Button4 Last To display the last record of the dataset

Page 84: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 55

Solution: Unguided Practice

UGP 1

Data to be displayed:

Inv

Date

CustID

ProdID

Cost

Profit

1. Create a new Visual Basic Windows Application project by clicking the New Project button in Microsoft Development Environment [design] - Start Page. Form1 is added to the project by default.

2. Select View from the menu bar and then select Toolbox from the View menu. The Toolbox is displayed on the left of the screen.

3. From the Data tab of the Toolbox, drag OleDbDataAdapter on to Form1. The Data Adapter Configuration Wizard welcome screen is displayed. Click the Next button.

4. On the next screen, make a new connection to the CallCenter11 database.

5. On the next screen, ensure that the Use SQL statements radio button is selected. Click Next.

6. On the next screen, click the Query Builder button.

7. When the Query Builder opens, the Add Table dialog box is displayed. Select the CustOrder table and click the Add button to add the table to the Query Builder. The table is added to the Query Builder.

8. Click Close to close the Add Table dialog box.

9. Select the Inv, Date, CustID, ProdID, Advance, and Cost fields from the CustOrder table.

10. Click OK after selecting the fields. The designed query is displayed on the screen.

11. Click Next to build the query.

12. The last screen of the wizard displays the message that the data adapter has been configured successfully. It also displays the statements generated by the data adapter to select, insert, update, and delete the table records. Click Finish to close the Data Adapter Configuration Wizard.

Create a dataset for storing records by following the given steps:

1. Click Data from the menu bar.

2. Select Generate Dataset from the Data menu. The Generate Dataset dialog box is displayed.

3. The New radio button would be selected by default since there are no existing datasets. The CustOrder table checkbox would be selected by default. Do not change the default option and click OK. The dataset is added to the component tray.

4. Open Dataset1.xsd by double-clicking it in the Solution Explorer window.

Page 85: 02_VB_NET_CG

54 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Even when no DataView object is created for a data table, the data table has a default DataView object that can be used to filter and sort data. The default DataView object can be accessed by using the DefaultView property of the data table, shown below:

Dim t1 As DataTable

t1 = DataSet1.Tables("Employees")

t1.DefaultView.RowFilter = "Age < 45"

Demos and Practices The solutions for demos, guided practices, and unguided practices for this lesson are stored in the Solutions\VB.NET\Lesson 6 folder. The projects to be provided to the students for 6.UGP.2 and 6.UGP.3 are present in the Data Files\VB.NET\Lesson6 folder.

FAQ 1. Can we use both simple and complex binding in a single application?

Ans: Yes. Since you can use different controls in an application, both simple and complex binding can be implemented in a single application.

Solutions: Just A Minute… 1. What is the difference between simple data binding and complex data binding? What are the

controls used in each type of binding?

Ans: Simple data binding is the process of binding a control, such as a TextBox or a Label control, to a value in a dataset. The dataset value can be bound to the control by using the properties of the control. A Textbox control is used for simple binding.

While simple data binding involves binding a control to a dataset value, complex data binding is the process of binding a component to display multiple values for a column from the dataset rows. The DataGrid, Listbox, and ComboBox controls are used for complex binding.

2. The records of customers having monthly income of $4200 need to be displayed in the ascending order of their names from the table Employees. Write the code to retrieve filtered records and store the retrieved records.

Ans: The code is as follows:

Dim t1 As DataTable

t1 = DataSet11.Tables("Employees")

Dim str1 As String

Dim str2 As String

str1 = "Income > 4200"

str2 = "Name ASC"

Dim result() As DataRow

result = t1.Select(str1, str2)

Page 86: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 53

Lesson Six

Experiences Start the session by recalling the concepts covered in lesson 5 covered how to preview data in the database in a tabular format. Then, explain the need and benefits of displaying data in a customized format.

Explain the difference between simple and complex data binding through the example of a Student Registration form for a university. You can use the following controls in your example:

Control Purpose

TextBox To display the student name, age, and address

ListBox To display the list of courses offered by the university

ComboBox To display class timings where the student can select from existing timings or enter the timing

DataGrid To display records in a tabular format where the records can be added, modified, or deleted

While explaining how to filter a dataset, explain that when the filter criterion is known at design time, parameterized queries should be used.

Explain the function of the CurrencyManager and BindingContext classes clearly since students might find it confusing initially.

Additional Inputs

Filtering a Dataset

A dataset can be filtered by using the versions of the records in the dataset. When a dataset is populated for the first time, it contains the original version of records. When the data is changed, the dataset contains the original as well as the modified version of records. The record version can be used as the third parameter of the Select() method. For example,

Dim Str1, Str2 as string

Str1 = “Age > 30”

Str2 = “Name DESC”

t1 = DataSet1.Tables("Employees").Select(Str1,Str2, DataViewRowState.OriginalRows)

The above code retrieves employee details for employees whose age exceeds 30 years in the ascending order of their names. The rows that will be retrieved will be the original rows.

Some other versions of a dataset are CurrentRows, Added, and Unchanged.

Page 87: 02_VB_NET_CG

52 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

11. On the next screen, ensure that the Use SQL statements radio button is selected. Click Next.

12. On the next screen, click the Query Builder button.

13. When the Query Builder opens, the Add Table dialog box is displayed. Select the CustOrder table and click the Add button to add the table to the Query Builder. The table is added to the Query Builder.

14. Click Close to close the Add Table dialog box.

15. Select all the fields of the CustOrder table.

16. Click OK after selecting the fields. The designed query appears in the screen.

17. Click Next to build the query.

18. The last screen of the wizard displays the message that the data adapter has been configured successfully. It also displays the statements generated by the data adapter to select, insert, update, and delete table records. Click Finish to close the Data Adapter Configuration Wizard.

Create a dataset for storing the records by performing the following steps:

1. Click Data from the menu bar.

2. Select Generate Dataset from the Data menu. The Generate Dataset dialog box is displayed.

3. The New radio button would be selected by default since there are no existing datasets. The CustOrder table checkbox is selected by default. Accept default options and click OK. The dataset is added to the component tray.

4. Open Dataset1.xsd by double-clicking it in the Solution Explorer window.

5. Click the first column in the first blank line of the table grid and select the element option from the drop-down list.

6. In the next column in the same line, enter Percentage as name for the column.

7. In the last column of the line, select integer as the data type for the column from the drop-down list.

8. Select the new column in the table grid. Click View from the menu bar. Then, select Properties Window from the View menu. Enter the following expression in the Expression property for the column:

Advance/Cost * 100

9. Save and close DataSet1.xsd. Then, select OleDbDataAdapter1 from the component tray.

10. Select Data from the menu bar. Then select the Preview Data option from the Data menu.

11. The Data Adapter Preview window is displayed. Select OleDbDataAdapter1 from the Data adapters list box.

12. By default, the target dataset is DataSet1. Click the Fill Dataset button to fill the dataset created with the records from the CustOrder table.

13. The records from the CustOrder table are displayed in a tabular format in the Results pane of the Data Adapter Preview window.

Page 88: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 51

3. Change the datasource, user ID, and password according to the requirements. For example, set the name of the data source to the name of the database server from where data has to be accessed and change the ID and password for the SQL server according to the ID and the password required to log on to the server.

4. Save the project and run the application.

NOTE: Ensure that the steps given above are performed before executing all the demos guided practices, and unguided practices involving ADO.NET connectivity.

Solution: Guided Practice

5.P.1

Data to be displayed:

Inv

Date

FName

ProductID

Cost

Advance

1. Create a new Visual Basic Windows Application project by clicking the New Project button in Microsoft Development Environment [design] - Start Page. Form1 is added to the project.

2. From the Tools menu, select the Connect to Database option. The Data Link Properties dialog box is displayed.

3. In the Select or enter a server name combo box under the Connection tab, enter the server name or select the server name to which the application will connect.

4. Next, provide the information about how to log on to the server. You can either choose to log on to the server by using Windows NT integrated security or specify the user name and password for connecting to the server.

5. Next, enter the name the database from which you want to access the data or select the database from the Select the database on the server combo box. In this case, select the database CallCenter11 from the list box.

6. You can test whether the connection has been created successfully or not by clicking the Test Connection button. If the connection has been created successfully, the message Test connection succeeded is displayed. Click OK to close the message box.

7. Click OK to apply all the specified settings and close the Data Link Properties dialog box.

8. Select View from the menu bar and then select Toolbox from the View menu.

9. From the Data tab of the Toolbox, drag the OleDbDataAdapter object into Form1. The Data Adapter Configuration Wizard welcome screen is displayed. Click the Next button.

10. On the next screen, select the data connection for the data adapter from the list box.

Page 89: 02_VB_NET_CG

50 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Emphasize that since most of the data retrieval applications also need to manipulate the data, such as adding, deleting, and modifying data, DataReaders do not find much use. The following code can be used as an example for retrieving data through DataReader:

Dim Command1 As OleDb.OleDbCommand

Dim DataReader1 As OleDb.OleDbDataReader

Dim Str1 As String = "provider=sqloledb;user id=sa;password=;database=CallCenter11;server= DEVSERVER1"

Dim Str2 As New OleDb.OleDbConnection(Str1)

Str2.Open()

Command1 = New OleDb.OleDbCommand("Select * from Employees", Str2)

DataReader1 = Command1.ExecuteReader()

DataReader1.Read()

TextBox1.Text = DataReader1.GetString(0)

TextBox2.Text = DataReader1.GetString(1)

TextBox3.Text = DataReader1.GetString(1)

DataReader1.Close()

Str2.Close()

The NextResult() method of the DataReader object sets the DataReader to read the next result.

Creating Untyped Dataset

An untyped dataset can be created by dragging DataSet from the Data tab of the Toolbox onto the form. A blank dataset is added to the component tray.

Tables, columns, and rows can be added to the dataset by using the Properties window or syntactically as shown in the following example:

DataSet1.Tables.Add("Employees")

DataSet1.Tables("Employees").Columns(0).ColumnName = "EmpID"

Demos and Practices

The solutions for demos and practices for this lesson are stored in the Solutions\Lesson5\ folder. You need to perform the following steps to execute all the demos and practices involving ADO.NET:

1. Open the Form Designer window.

2. Open the Properties window for the OleDbConnection object present in the component tray.

The ConnectionString property of the OleDbConnection object has the following entries:

Provider=SQLOLEDB.1;User ID=sa;pwd=;Initial Catalog=CallCenter11;Data Source=localhost

Page 90: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 49

While disconnected data processing in ADO is done by calling the OLE DB providers, in ADO.NET this is done through data adapter, which calls the OLE DB providers. Thus, all the database operations, such as data validity and performance optimization are done by a data adapter.

In ADO, a recordset can be shared between applications by using COM marshalling. On the other hand, ADO.NET is entirely based on XML and datasets can be shared between applications just by transmitting its XML schema. Transmitting XML files provides advantages over COM, such as richer set of data types, no need for data type conversion (COM marshalling requires the recordset data types to COM data types).

Creating a Dataset and a DataRelation Object

A dataset can be created programmatically as follows:

Dim ds1 As DataSet = New DataSet("Employees")

The following example illustrates the creation of a DataRelation object for linking the tables in a dataset:

Dim dc1,dc2 as DataColumn

dc1 = DataSet11.Tables("CustomerTracking").Columns("CustID")

dc2 = DataSet11.Tables("CustOrder").Columns("CustID")

Dim dr1 As DataRelation

dr1 = New DataRelation("CustOrder", dc1, dc2)

Dataset11.Relations.Add(dr1)

DataReader

The following diagram illustrates the working of a DataReader object:

The ExecuteReader() method of a Command object is used to send the command text to the Connection object. The Connection object creates a DataReader object and stores the result of the command execution within it.

Accessing data through DataReader is fast since it directly retrieves data from the data source.

APPLICATION DATAREADER

EXECUTEREADER COMMAND

CONNECTION

Page 91: 02_VB_NET_CG

48 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

2. What are the various components of a dataset?

Ans: The components of a dataset object model are Relations collection, Tables collection, DataRelation, DataTable, Rows collection, Columns collection, DataRow, and DataColumn.

3. What is the function of a data adapter?

Ans: A data adapter is integral to the working of ADO.NET since data is transferred to and from a database through a data adapter. A data adapter creates a dataset and updates the database. When you make any changes to the dataset, the modifications to the database are actually performed by the data adapter.

4. List the features of ADO.NET.

Ans: The main features of ADO.NET are:

Disconnected data architecture

Data cached in datasets

Data transfer in XML format

5. What are the different methods of creating a data adapter?

Ans: The methods for creating a data adapter are:

Manually

Through Server Explorer

Through Data Adapter Configuration wizard

6. What is the difference between a typed and an untyped dataset?

Ans: A typed dataset is derived from the base DataSet class and has an associated XML schema, which is created at the time of the creation of the dataset, whereas an untyped dataset does not have any associated XML schema. In an untyped dataset, tables and columns are represented as collections. Since an XML schema is not created for an untyped dataset, the structure of an untyped dataset is not known at the time of compilation.

Additional Inputs

Difference between ADO and ADO.NET

There are some major differences between ADO and ADO.NET. Theses are listed below:

There are no recordset objects in ADO.NET. Instead, the data is stored in datasets.

In ADO, recordsets use the JOIN query to stores multiple tables, whereas datasets can contain data retrieved from multiple tables by creating multiple DataTable objects. In addition, datasets can also stores the information about relationships between tables.

Navigation in ADO is done through the MoveNext() method. In ADO.NET, since tables and their rows are represented as collections, a user can navigate through a table by using a primary key index.

Page 92: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 47

Lesson Five

Experiences Introduce the concept of ADO.NET in the context of present business scenario where organizations store data at a centrally located database and different departments access the data from the same database. Explain that need for ADO.NET in relation to the users who want to access the database but do not know database commands for accessing data.

The ADO.NET object model is an important concept. The students should be able to distinguish the different components of the ADO.NET object model and understand the working of each one of them clearly.

While explaining the components of the ADO.NET object model, do not cover data readers in detail, as students would not use them in any of the chapters. However, do bring out the difference between a dataset and a data reader clearly. Explain the benefit of using disconnected data architecture, as it is the most important feature of ADO.NET.

FAQs 1. Do I need to any additional component or make any modifications in the registry to work with

ADO.NET?

Ans: No, configuration of ADO.NET is handled while installing VS.NET. You do not need to modify any registry settings for working with ADO.NET

2. Which is the most efficient method of accessing data from a data source?

Ans: Accessing data through a dataset is the most efficient method since it needs connection to the data source for the least amount of time and the retrieved data can be easily manipulated.

3. Is the code for the SQL data provider different from the OLEDB data provider?

Ans: If you have written a code for the SQL data provider, you just have to change the connection type from SQLConnection to OLEDBConnection and the connection string to use the same code for an OLEDB data provider.

4. Can we set a relationship between tables even if the relationship does not exist in the database?

Ans: Yes, we can create a relationship between tables even if the relationship does not exist between the tables in the dataset by using XML designer.

Solutions: Just A Minute… 1. Identify the two types of data providers and list the difference between them?

Ans: The two types of data providers are SQL data provider and OLEDB data provider.

The OLEDB data provider works with all the OLE DB providers, such as SQL OLE DB provider, Oracle OLE DB provider, and Jet OLE DB provider, whereas the SQL data provider is used to work specifically with Microsoft SQL Server.

Page 93: 02_VB_NET_CG

46 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

System.Object,ByVal e As System.EventArgs) Handles

cmdCheckdata.Click

If Val(txtd_join.Text) = 0 Then

txtd_join.Text = CType(Today, Date)

testdate = CType(Today, Date)

cmdSave.Enabled = True

Else

testdate = CType(txtd_join.Text, Date)

If (testdate < Today) Or (testdate > Today) Then

MessageBox.Show("The entered date is not valid.

The Date cannot be less than or greater than the

current date.", "Data Entry Error",

MessageBoxButtons.OK, MessageBoxIcon.Error)

Exit Sub

Else

testdate = CType(Today, Date)

cmdSave.Enabled = True

End If

End If

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal

e As System.EventArgs) Handles MyBase.Load

cmdSave.Enabled = False

cmdGet.Enabled = False

End Sub

End Class

Page 94: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 45

Private Sub Form1_Load(ByVal sender As System.Object, ByVal

e As System.EventArgs) Handles MyBase.Load

cmdSave.Enabled = False

cmdGet.Enabled = False

cmdReset.Enabled = False

End Sub

End Class

Solution: Additional Exercise 4.A.1 Public Class Emp

Public empDate As Date

End Class

Public Class Form1

Inherits System.Windows.Forms.Form

Dim testdate As Date

Dim EmpObject As New Emp()

Private Sub cmdSave_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles cmdSave.Click

EmpObject.empDate = testdate

cmdGet.Enabled = True

End Sub

Private Sub cmdGet_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles cmdGet.Click

lbl_date.Text=

CType(EmpObject.empDate, Date)

End Sub

Private Sub cmdCheckData_Click(ByVal sender As

Page 95: 02_VB_NET_CG

44 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

End Sub

Public Sub Data_Check(ByVal e As String)

Dim x As Integer

Dim y As String

Dim z As Boolean

x = Len(e)

y = Mid(e, 1, 1)

z = Val(Mid(e, 2, 3))

If x <> 4 Or y <> "E" Or z <> True Then

MessageBox.Show("The entered data is not valid. The Employee ID should start with the letter E followed by three digits.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

j = "not ok"

txteid.Clear()

Else

k = "n"

j = "not ok"

End If

End Sub

Public Sub Data_Check(ByVal e_age As Integer)

If e_age < 21 Or e_age > 60 Then

MessageBox.Show("The entered data is not valid. The Employee age cannot be less than 21 and greater than 60.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

j = "not ok"

txtage.Clear()

Else

j = "ok"

End If

End Sub

Page 96: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 43

End If

If Val(txtsalary.Text) < 10000 Or Val(txtsalary.Text) > 60000 Then

MessageBox.Show("The entered data is not valid. The salary cannot be less than 10000 and greater than 60000.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

j = "not ok"

Exit Sub

End If

If Val(txtd_join.Text) = 0 Then

txtd_join.Text = CType(Today, Date)

testdate = CType(Today, Date)

Else

testdate = CType(txtd_join.Text, Date)

If (testdate < Today) Or (testdate > Today) Then

MessageBox.Show("The entered date is not valid. The Date of Joining cannot be less than or greater than the current date.", "Data Entry Error ", MessageBoxButtons.OK, MessageBoxIcon.Error)

j = "not ok"

Exit Sub

Else

testdate = CType(Today, Date)

End If

End If

If j = "ok" And k = "n" Then

MessageBox.Show("Thank you for entering the employee details!", "Congratulations!!!", MessageBoxButtons.OK, MessageBoxIcon.Information)

cmdSave.Enabled = True

cmdGet.Enabled = True

cmdReset.Enabled = True

End If

Page 97: 02_VB_NET_CG

42 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

lble_id.Text = "E_ID"

lblf_name.Text = "FName"

lbll_name.Text = "LName"

lbl_add.Text = "Address"

lbl_age.Text = "Age"

lbl_dateofjoining.Text = "D_join"

lbl_dept.Text = "Dept."

lbl_salary.Text = "Salary"

cmdSave.Enabled = False

cmdGet.Enabled = False

cmdReset.Enabled = False

End Sub

Private Sub cmdCheckData_Click(ByVal sender As

System.Object,ByVal e As System.EventArgs) Handles

cmdCheckdata.Click

Data_Check(txteid.Text)

If k = "yes" Then

Exit Sub

End If

i = Len(txtage.Text)

If i = 0 Then

MessageBox.Show("The entered data is not valid. The Employee age cannot be less than 21 and greater than 60.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

ElseIf Val(txtage.Text) <> 0 Then

i = CType(txtage.Text, Integer)

Call Data_Check(i)

Else

MessageBox.Show("The entered data is not valid. The Employee age cannot be less than 21 and greater than 60.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

Page 98: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 41

Private Sub cmdGet_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles cmdGet.Click

lble_id.Text = MyNewClass.eid

lblf_name.Text = MyNewClass.fname

lbll_name.Text = MyNewClass.lname

lbl_add.Text = MyNewClass.address

lbl_age.Text = MyNewClass.age

lbl_dateofjoining.Text = MyNewClass.Date_of_joining

lbl_dept.Text = MyNewClass.Department

lbl_salary.Text = MyNewClass.salary

End Sub

Private Sub cmdReset_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles cmdReset.Click

MyNewClass.eid = ""

MyNewClass.fname = ""

MyNewClass.lname = ""

MyNewClass.address = ""

MyNewClass.age = 0

MyNewClass.Date_of_joining = Today

MyNewClass.Department = ""

MyNewClass.salary = 0

txteid.Clear()

txtfname.Clear()

txtlname.Clear()

txtaddress.Clear()

txtage.Clear()

txtdept.Clear()

txtd_join.Clear()

txtsalary.Clear()

Page 99: 02_VB_NET_CG

40 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

UGP 2 Public Class Employee

Public eid As String = ""

Public fname As String = ""

Public lname As String = ""

Public address As String = ""

Public age As Integer = 0

Public Date_of_joining As Date

Public Department As String = ""

Public salary As Integer = 0

End Class

Public Class frmEmployeedetails

Inherits System.Windows.Forms.Form

Dim MyNewClass As New Employee()

Dim i As Integer = 0

Dim j As String = "ok"

Dim k As String = "yes"

Dim testdate As Date

Private Sub cmdSave_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles cmdSave.Click

MyNewClass.eid = txteid.Text

MyNewClass.fname = txtfname.Text

MyNewClass.lname = txtlname.Text

MyNewClass.address = txtaddress.Text

MyNewClass.age = txtage.Text

MyNewClass.Date_of_joining = testdate

MyNewClass.Department = txtdept.Text

MyNewClass.salary = txtsalary.Text

End Sub

Page 100: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 39

ByVal e As System.EventArgs) Handles cmdReset.Click

OrderObject.I_no = ""

OrderObject.O_date = Today

OrderObject.C_id = ""

OrderObject.P_id = ""

OrderObject.Cost = 0

OrderObject.Advance = 0

txtino.Clear()

txtdate.Clear()

txtcid.Clear()

txtpid.Clear()

txtcost.Clear()

txtadvance.Clear()

lbli_no.Text = "I_No"

lbl_date.Text = "Date"

lblc_id.Text = "C_ID"

lblp_id.Text = "P_ID"

lbl_cost.Text = "Cost"

lbl_advance.Text = "Advance"

cmdSave.Enabled = False

cmdGet.Enabled = False

cmdReset.Enabled = False

End Sub

Private Sub frmOrderdetails_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

cmdSave.Enabled = False

cmdGet.Enabled = False

cmdReset.Enabled = False

End Sub

End Class

Page 101: 02_VB_NET_CG

38 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

txtino.Clear()

Exit Sub

End If

If Val(txtcost.Text) = 0 Or Val(txtcost.Text) < 0 Then

MessageBox.Show("The entered data is not valid. Cost cannot be zero or negative.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

txtcost.Clear()

Exit Sub

End If

If Val(txtadvance.Text) < 0 Then

MessageBox.Show("The entered data is not valid. Advance cannot be negative.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

txtadvance.Clear()

Exit Sub

End If

If Val(txtcost.Text) < Val(txtadvance.Text) Then

MessageBox.Show("The entered data is not valid. Advance cannot be more than the cost.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

txtadvance.Clear()

Exit Sub

End If

If Val(txtdate.Text) = 0 Then

txtdate.Text = CType(Today, Date)

End If

cmdSave.Enabled = True

cmdGet.Enabled = True

cmdReset.Enabled = True

End Sub

Private Sub cmdReset_Click(ByVal sender As System.Object,

Page 102: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 37

OrderObject.Advance = Val(txtadvance.Text)

End Sub

Private Sub cmdGet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGet.Click

lbli_no.Text = OrderObject.I_no

lbl_date.Text = CType(OrderObject.O_date, Date)

lblc_id.Text = OrderObject.C_id

lblp_id.Text = OrderObject.P_id

If OrderObject.Cost = 0 Then

lbl_cost.Text = 0

Else

lbl_cost.Text = OrderObject.Cost

End If

If OrderObject.Advance = 0 Then

lbl_advance.Text = 0

Else

lbl_advance.Text = OrderObject.Advance

End If

End Sub

Private Sub cmdCheckdata_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCheckdata.Click

Dim x, z As Integer

Dim y As String

x = Len(txtino.Text)

z = Val(Mid(txtino.Text, 2, 3))

y = Mid(txtino.Text, 1, 1)

If x <> 4 Or y <> "I" Or z = 0 Then

MessageBox.Show("The entered data is not valid. The Invoice number should start with the letter I followed by three digits.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

Page 103: 02_VB_NET_CG

36 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

The details of controls for displaying the customer details retrieved from the memory variables are listed in the following table:

Control For Control Type Control Name Control Text

Invoice Number Label lbli_no I_No

Date Label lbl_date Date

Customer ID Label lblc_id C_ID

Product ID Label lblp_id P_ID

Cost Label lbl_cost Cost

Advance Label lbl_advance Advance

The Order class should be declared as given below:

Public Class Order

Public I_no As String = ""

Public O_date As Date

Public C_id As String = ""

Public P_id As String = ""

Public Cost As Integer = 0

Public Advance As Integer = 0

End Class

The code that implements the required checks is given below:

Public Class frmOrderdetails

Inherits System.Windows.Forms.Form

Dim OrderObject As New Order()

Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click

OrderObject.I_no = txtino.Text

OrderObject.O_date = txtdate.Text

OrderObject.C_id = txtcid.Text

OrderObject.P_id = txtpid.Text

OrderObject.Cost = txtcost.Text

Page 104: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 35

Save the project by selecting the Save All option from the File menu.

1. Select Start from the Debug menu, or press F5.

2. Fill in the employee details in the relevant text boxes. You can also enter invalid data for employee id and telephone number intentionally to validate the checks that you have applied for the Employee data entry screen.

3. If any error message appears on the screen, read the message and re-enter values in the relevant text boxes.

4. Use the Save, Get, and Reset buttons to verify the correct working of the code.

Solution: Unguided Practice

UGP 1 The details of controls to accept data on the Order Details form are listed in the following table:

Control For Control Type Control Name Control Text

Label lblino Invoice Number Invoice Number

TextBox txtino

Label lbldate Date Date

TextBox txtdate

Label lblcid Customer ID Customer ID

TextBox txtcid

Label lblpid Product ID Product ID

TextBox txtpid

Label lblcost Cost Cost

TextBox txtcost

Label lbladvance Advance Advance

TextBox txtadvance

The details of controls for storing data in and retrieving data from memory variables are listed in the following table:

Control For Control Type Control Name Control Text

Saving entered data Button cmdSave Save

Fetching data from memory variables

Button cmdGet Get

Validating entered data Button cmdCheckdata Check Data

Clearing contents of the TextBoxes

Button cmdReset Reset

Page 105: 02_VB_NET_CG

34 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

If x <> 4 Or y <> "E" Or z <> True Then

MessageBox.Show("The entered data is not valid. The Employee ID should start with the letter E followed by three digits.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

j = "not ok"

txteid.Clear()

Else

k = "n"

j = "not ok"

End If

End Sub

Public Sub Data_Check(ByVal e_age As Integer)

If e_age < 21 Or e_age > 60 Then

MessageBox.Show("The entered data is not valid. The Employee age cannot be less than 21 and greater than 60.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

j = "not ok"

txtage.Clear()

Else

j = "ok"

End If

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

cmdSave.Enabled = False

cmdGet.Enabled = False

cmdReset.Enabled = False

End Sub

End Class

Page 106: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 33

If k = "yes" Then

Exit Sub

End If

i = Len(txtage.Text)

If i = 0 Then

MessageBox.Show("The entered data is not valid. The Employee age cannot be less than 21 and greater than 60.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

ElseIf Val(txtage.Text) <> 0 Then

i = CType(txtage.Text, Integer)

Call Data_Check(i)

Else

MessageBox.Show("The entered data is not valid. The Employee age cannot be less than 21 and greater than 60.", "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

End If

If j = "ok" And k = "n" Then

MessageBox.Show("Thank you for entering the employee details!", "Congratulations!!!", MessageBoxButtons.OK, MessageBoxIcon.Information)

cmdSave.Enabled = True

cmdGet.Enabled = True

cmdReset.Enabled = True

End If

End Sub

Public Sub Data_Check(ByVal e As String)

Dim x As Integer

Dim y As String

Dim z As Boolean

x = Len(e)

y = Mid(e, 1, 1)

z = Val(Mid(e, 2, 3))

Page 107: 02_VB_NET_CG

32 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

e As System.EventArgs) Handles cmdReset.Click

MyNewClass.eid = ""

MyNewClass.fname = ""

MyNewClass.lname = ""

MyNewClass.address = ""

MyNewClass.age = 0

MyNewClass.Date_of_joining = Today

MyNewClass.Department = ""

MyNewClass.salary = 0

txteid.Clear()

txtfname.Clear()

txtlname.Clear()

txtaddress.Clear()

txtage.Clear()

txtdept.Clear()

txtd_join.Clear()

txtsalary.Clear()

lble_id.Text = "E_ID"

lblf_name.Text = "FName"

lbll_name.Text = "LName"

lbl_add.Text = "Address"

lbl_age.Text = "Age"

lbl_dateofjoining.Text = "D_join"

lbl_dept.Text = "Dept."

lbl_salary.Text = "Salary"

End Sub

Private Sub cmdCheckdata_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCheckdata.Click

Data_Check(txteid.Text)

Page 108: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 31

MyNewClass.Date_of_joining = testdate

End If

MyNewClass.Department = txtdept.Text

If Val(txtsalary.Text) = 0 Then

MyNewClass.salary = 0

Else

MyNewClass.salary = txtsalary.Text

End If

End Sub

Private Sub cmdGet_Click(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles cmdGet.Click

lble_id.Text = MyNewClass.eid

lblf_name.Text = MyNewClass.fname

lbll_name.Text = MyNewClass.lname

lbl_add.Text = MyNewClass.address

If MyNewClass.age = 0 Then

lbl_age.Text = ""

Else

lbl_age.Text = MyNewClass.age

End If

lbl_dateofjoining.Text = MyNewClass.Date_of_joining

lbl_dept.Text = MyNewClass.Department

If MyNewClass.salary = 0 Then

lbl_salary.Text = ""

Else

lbl_salary.Text = MyNewClass.salary

End If

End Sub

Private Sub cmdReset_Click(ByVal sender As System.Object, ByVal

Page 109: 02_VB_NET_CG

30 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Public fname As String = ""

Public lname As String = ""

Public address As String = ""

Public age As Integer = 0

Public Date_of_joining As Date

Public Department As String = ""

Public salary As Integer = 0

End Class

Public Class frmEmployeedetails

Inherits System.Windows.Forms.Form

Dim MyNewClass As New Employee()

Dim MyNewClass As New Employee()

Dim i As Integer = 0

Dim j As String = "ok"

Dim k As String = "yes"

Dim testdate As Date = #6/12/2001# 'This is a sample date to be

used when no date is entered.

Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles cmdSave.Click

MyNewClass.eid = txteid.Text

MyNewClass.fname = txtfname.Text

MyNewClass.lname = txtlname.Text

MyNewClass.address = txtaddress.Text

MyNewClass.age = txtage.Text

If Val(txtd_join.Text) = 0 Then

MyNewClass.Date_of_joining = testdate

Else

testdate = CType(txtd_join.Text, Date)

Page 110: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 29

Eight member variables need to be declared in the Employee class. The data type of each variable is listed in the following table:

Variables Data type To hold value for

eid String Employee ID

fname String First Name

lname String Last Name

address String Address

Age integer Age

Date_of_joining Date Dateofjoining

Department String Dept

Salary integer Salary

You can use the Visual Studio .NET IDE to create the user interface screen. To create the user interface screen, you need to perform the following steps:

1. Start Microsoft Visual Studio .NET using the Start menu.

2. Select the Project option from the New submenu under the File menu.

3. Ensure that in the New Project dialog box, Project Types is Visual Basic Projects and Template is Windows Application. Type Employee_details in the Name text box and click the OK button.

4. Right-click the Form1.vb form in the Solution Explorer window and select the Properties option to display the Properties window.

5. Click the Form1.vb form in the design viewer and set the Name property as frmEmployeeDetails and Text property as Employee Details by using the Properties window.

6. In the Solution Explorer window, right-click the Employee_details project and select the Properties option.

7. Select frmCustomerdetails as the startup object from the Startup object drop-down list and click the OK button.

8. Add the required controls from the Toolbox and specify a name for the controls using the Properties window.

9. Organize the controls.

Since the requirement specified in the problem statement is to display error messages when incorrect data is entered for employee id and age, you need to use either the Msgbox function or the Show() method of the MessageBox class to display error messages.

Since MessageBox class offers better user interface, you will use the MessageBox class to display appropriate error messages. The entire code for this practice is given in the following code:

Public Class Employee

Public eid As String = ""

Page 111: 02_VB_NET_CG

28 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Control For Control Type Control Name Control Text

TextBox txtdept

Label lblsalary Salary Salary

TextBox txtsalary

The details of controls for storing data in and retrieving data from memory variables are listed in the following table:

Control For Control Type Control Name Control Text

Saving entered data Button cmdSave Save

Fetching data from memory variables

Button cmdGet Get

To allow users to check for the validity of the data entered, you need to invoke the Check_data() procedure. It is important that until the data is validated and found correct, the users should not be able to access the Save and Get buttons on the frmEmployeeDetails form. Therefore, you need to initially disable the Save and Get buttons. However, to allow users to invoke the Check_data() procedure, you need to add a command button to the frmEmployeeDetails form. You can then call the Check_data () procedure from the Click event of the newly added Check Data button.

Again, since there should be a provision for clearing the details of last employee details entered, you should include another button to the frmEmployeeDetails form. Since this button will be used for clearing the content of the text boxes on the frmEmployeeDetails form, you can name the button as Reset. The following table recommends suitable prefixes that you can use for the two buttons:

Control For Control Type Control Name Control Text

Validating entered data Button cmdCheckdata Check Data

Clearing contents of the TextBoxes

Button cmdReset Reset

The details of controls for displaying the employee details retrieved from memory variables are listed in the following table:

Control For Control Type Control Name Control Text

Employee ID Label lble_id E_ID

First Name Label lblf_name Fname

Last Name Label lbll_name Lname

Address Label lbl_add Address

Age Label lbl_age Age

Date of Joining Label lbl_dateofjoining Dateofjoining

Department Label lbl_dept Dept

Salary Label lbl_salary Salary

Page 112: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 27

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

PageSetupDialog1.PageSettings = PgSettings

PageSetupDialog1.ShowDialog()

End Sub

End Class

Ans: Import System.Drawing.Printing using the Imports keyword.

Solution: Guided Practice

4.P.1 As per the problem statement, the employee data entry application must check the validity of the employee id and age. You can add the provision for checking valid employee id and age by including procedures in the employee data entry application. Since Visual Basic .NET allows the use of procedure overloading, while adding procedures to the employee data entry application, you can create two versions of the same procedure to check the validity of the employee id and age.

You will create an overloaded procedure for checking the validity of employee id and age. You can name the procedure as Check_data().

To accept employee details, you need to add controls to the frmEmployeeDetails form.

The details of controls to accept data on the Employee Details form are listed in the following table:

Control For Control Type Control Name Control Text

Label lbleid Employee ID Employee ID

TextBox txteid

Label lblfname First Name First Name

TextBox txtfname

Label lbllname Last Name Last Name

TextBox txtlname

Label lbladdress Address Address

TextBox txtaddress

Label lblage Age Age

TextBox txtage

Label lbld_join Date of joining Date of Joining

TextBox txtd_join

Department Label lbldept Department

Page 113: 02_VB_NET_CG

26 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Dim Annual_Salary As Integer = 150000

Dim months As Integer = 12

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Monthly_Salary = Calculate_Average(Annual_Salary, months)

Label1.Text = "The salary earned per month is: " &

Monthly_Salary

End Sub

Public Function Calculate_Average(ByVal asalary As Integer, ByVal mnths As Integer) As Integer

asalary = asalary / mnths

Return asalary

End Function

End Class

Ans: The text “The salary earned per month is: 12500 ” will be displayed as the text for Label1.

4. What will be the output of the following code when Button1 is clicked at run time?

Public Class Form1

Inherits System.Windows.Forms.Form

Dim FDialog As New FontDialog()

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

TextBox1 = FDialog.Font

End Sub

End Class

Ans: The code will not display any output. Since the ShowDialog() method of the FontDialog class is not called, the Font dialog box will not be displayed. Therefore, you cannot change the font style, size, and effect.

5. The following code snippet is written in the Code Editor window of Form1. There is one PageSetupDialog control added to the form. While building the project, there was a build error. What would you do to resolve the error?

Public Class Form1

Inherits System.Windows.Forms.Form

Dim PgSettings As New PageSettings()

Page 114: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 25

Optional ByVal Amount As Single = 10)

Label1.text = CustAcct

Label2.text = Amount

End Sub

End Class

Ans: The numbers 18 and 12 will be displayed as the text of the two labels on the form.

2. There are two labels named Label1 and Label2 and one button named Button1 on the form, Form1. You have created a user-defined Sub procedure called MySub to process information when the user clicks the Button1. Predict the output of the following code when the program is executed.

Public Class Form1

Inherits System.Windows.Forms.Form

Dim j As Integer

Private Sub MySub(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

j = Item_Status("I60", 90)

Label2.Text = "The units sold is: " & j

End Sub

Public Function Item_Status(ByVal ItemCode As String, ByVal Amount As Single) As Integer

Amount = Amount + 90

Label1.Text = "For the Item Code: " & ItemCode

Return Amount

End Function

End Class

Ans: The Text “For the Item Code: I60” will be displayed as the text for Label1, and the text “The units sold is: I80” will be displayed as the text for Label2.

3. There is a label named Label1 and a button named Button1 on the form, Form1. The following code is added in the Code Editor window of Form1. What will be the output of the program when Button1 is clicked at run time?

Public Class Form1

Inherits System.Windows.Forms.Form

Dim Monthly_Salary As Integer

Page 115: 02_VB_NET_CG

24 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Set (ByVal Value As Integer)

readwriteproperty=Value

End Set

End Property

End Class

Adding classes to a Visual Basic .NET application

It is important to note that you can define a class either by adding the class definition in the Code Editor window of the Form or by selecting Add Class option. You can access the Add Class option either from the Project menu or by right-clicking the project name in the Solution Explorer window and selecting Add Class option from the Add menu. If you create a class by using the Add Class option, Visual Basic .NET stores the class definition in a separate .vb file. However, if you define a class in the Code Editor window of a form, the definition is added to the code for the form and no separate .vb file is created. You can explicitly specify this information to students for their better understanding. To show you the distinction, the Employee class definition is added to the Code Editor window of the frmEmployeedetails form as shown in the following code.

FAQ 1. What is the difference between procedures in Visual Basic .NET and earlier versions of Visual

Basic?

Ans: In earlier versions parenthesis was not required for procedures or functions that did not take any parameters. In Visual Basic .NET, a parenthesis is required even if a procedure or function does not take any parameters. Also, in Visual Basic .NET, all values are passed by default by value. Another difference is that optional parameters must have a default value.

Solutions: Just a Minute… 1. There are two labels named Label1 and Label2 and one button named Button1 on the form,

Form1. Predict the output of the following code, when the Button1 is clicked at run time.

Public Class Form1

Inherits System.Windows.Forms.Form

Dim i As Integer = 18

Dim s As Single = 12

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles Button1.Click

Call Check_Acct_Status(i, s)

End Sub

Public Sub Check_Acct_Status(ByVal CustAcct As Integer,

Page 116: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 23

Encourage students to find out information about particular functions. Discussing all the functions is not possible within the allocated time. Searching for information will also help students to learn on their own.

Using dialog classes will be a comparatively new concept for students. As first part of this lesson will take less time, you can describe dialog boxes in details.

Additional Input

Properties

To make a property read-only or write-only, declare it as shown below:

[Access Specifier] [ReadOnly|WriteOnly] Property PropertyName ([parameters]) As Type

You must create a read-only property if you do not want others to change that property. Similarly, you can create a write-only property if you do not want others to read a property. The following is an example of the code that has all the three properties: read-only, write-only, and read/write.

Class PropertyDemo

Private readproperty As Integer

Private writeproperty As Integer

Private readwriteproperty As Integer

Public ReadOnly Property ReadOnlyProperty() As Integer

Get

Return readproperty

End Get

End Property

Public WriteOnly Property WriteOnlyProperty () As Integer

Set (ByVal Value As Integer)

writeproperty = Value

End Set

End Property

Public Property ReadAndWriteProperty () As Integer

Get

Return readwriteproperty

End Get

Page 117: 02_VB_NET_CG

22 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

After the base form is designed, you can create the inherited form, BaseForm. However, to create an inherited form, you first need to build the application. You build the application by selecting the Build option from the Build menu.

After you have performed the prerequisite task of building the application, you need to add an inherited form to the project. You add an inherited form by selecting the Add Inherited Form option from the shortcut menu.

1. In the Solution Explorer window, right-click the project name.

2. Select the Add Inherited Form option under the Add shortcut menu.

Selecting the Add Inherited Form option displays the Add New Item dialog box. In the Add New Item dialog box, specify the name of the inherited from as Query_Handling_Form and click the Open button. Next, you need to specify the component from which you want to inherit the form in the Inheritance Picker dialog box. Select the component named BaseForm and click the OK button.

After adding an inherited form to the project, you need to add a label to the inherited form to distinguish it from the base form. Add a label with the text The Inherited Form is Displayed to Query_Handling_Form.

1. Add a label to the inherited form as planned.

After adding the label to the Query_Handling_Form, you need to change the startup object to Query_Handling_Form.

1. In the Solution Explorer window, right-click the Inherited_Form label and select the Properties command.

2. In the Inherited_Form Property Pages dialog box, select Query_Handling_Form as the Startup object from the drop-down list box.

3. Click the OK button.

Save the project by selecting the Save All option from the File menu.

Select the Start option from the Debug menu, or press F5.

To exit the Visual Basic .NET application, select the Stop Debugging option from the Debug menu.

Lesson Four

Experiences You should compare the procedures in Visual Basic .NET with the methods and functions in Java. You do not need to go into details because students already know about methods. However, emphasize the fact that Visual Basic .NET has two types of procedures, Sub and Functions. While Function procedures return a value, Sub procedures do not return any value. Then, describe the syntax for both the types. You can illustrate the concept using examples given in the text book. Then, describe the different types of procedures.

While describing parameter array tell students about its importance.

Before starting with overloading, remind students about method signature and method overloading that they learned in C++ and Java. Show them an example of procedure overloading in Visual Basic .NET.

Page 118: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 21

Since all the data entry forms will have the Add, Modify, Delete, Reset and Exit buttons, you need to design the user interface of the base form using these five buttons. You also need to specify the text and the name of the form and the buttons on the form.

To provide a meaningful name to the form, set the Name property of the form to BaseForm and the Text property to Data Entry Form.

Control For Control Type Control Name Control Text

Adding records to the Query Handling database

Command Button cmdAdd Add

Modifying records of the Query Handling database

Command Button cmdModify Modify

Deleting records from the Query Handling database

Command Button cmdDelete Delete

Resetting the values in the other controls on the form

Command Button cmdReset Reset

Exiting the application Command Button cmdExit Exit

Since you need to verify that the Query_Handling_Form is displayed, you should plan to add a label to the Query_Handling_Form.

Control For Control Type Control Name Control Text

Displaying a message Label Label1 The Inherited Form is Displayed

Perform the necessary tasks to create the user interface based on the requirements.

You can use the Visual Studio IDE to create the user interface screen.

1. Start Microsoft Visual Studio .NET 7.0.

2. Select the Project command from the New submenu under the File menu.

3. Ensure that in the New Project dialog box, the Project Types is Visual Basic Projects and the Template is Windows Application. Type Inherited_Form in the Name text box and click the OK button.

4. Click the Solution Explorer button on the Toolbar to display the Solution Explorer window.

5. Right-click Form1.vb in the Solution Explorer window and select the Properties option to display the Properties window.

6. Click the form in the Windows Form designer and set the Name and Text properties of the form in the Properties window, as planned.

7. In the Solution Explorer window, right-click the Inherited_Form.vb and select the Properties command from the shortcut menu.

8. Select BaseForm as the startup object from the Startup object drop-down list and click the OK button.

9. Add the required controls from the Toolbox and name them, as planned.

10. Organize the controls, as planned.

Page 119: 02_VB_NET_CG

20 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

num = num * num * num

End Sub

Shadows Sub display()

MsgBox("The value stored in the num variable is: " & num)

End Sub

End Class

It is important to note that shadowing is different from Overriding since in overriding, you implement polymorphism by defining different implementation of a procedure using the same calling sequence.

Solutions: Just a Minute… 1. Why is a structure called a composite data type?

Ans: A structure is called a composite data type because within a structure you can define variables of varied data types, such as integer, string, single, double, date, and object.

2. Identify the syntactical error in the following declaration of an interface:

Interface IProductdetails

Property ProductName() As String

Sub UpdateCustStatus()

Label1.text = “This is a Sub Procedure to check the status of

the Product”

End Sub

Event Update_Complete()

End Interface

Ans: You cannot write the implementation steps of a Sub procedure within the declaration of an interface.

3. How are interfaces different from abstract classes?

Ans: All the methods in an interface have to be abstract and cannot have implementation code, whereas an abstract class might contain a method that has a body.

Solution: Guided Practice

3.P.1 Since the requirement stated in the problem statement is to create a similar user interface for all the data entry forms, you can create a base form that has the Add, Modify, Delete, Reset and Exit buttons on it. You can then inherit all of the data entry forms from the base form.

Page 120: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 19

the button. You also call the sqr()and the display() method of the derived class. If you execute the code and click the Button Button1, you get a message box that displays the calculated value of the number stored in the variable num. However, if you add a Sub procedure with the same name display() to the base class class1, the derived class class2 throws a build error that states that the Sub procedure name conflicts with the base class procedure name.

To protect the derived class class2 from throwing such build errors, you need to use the shadowing concept and declare the display() method in the derived class with the shadows keyword as shown below:

Public Class Form1

Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim c2 As New class2()

c2.sqr()

c2.display()

End Sub

End Class

Public Class class1

Public num As Integer = 9

Public Sub sqr()

num = num * num

End Sub

Public Sub display()

MsgBox("The value stored in the num variable is: " & num)

End Sub

End Class

Public Class class2

Inherits class1

Public Sub cube()

Page 121: 02_VB_NET_CG

18 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

defined in the derived class. In Visual Basic .NET, you implement shadowing by using the Shadows keyword. The following examples illustrate when you will use the shadowing concept:

Public Class Form1

Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim c2 As New class2()

c2.sqr()

c2.display()

End Sub

End Class

Public Class class1

Public num As Integer = 9

Public Sub sqr()

num = num * num

End Sub

End Class

Public Class class2

Inherits class1

Public Sub cube()

square = num * num * num

End Sub

Public Sub display()

MsgBox("The value stored in the num variable is: " & num)

End Sub

End Class

In the above example, you create a class called class1. In class1, you define a Sub procedure to calculate the square of the value stored in the variable num. Next, you inherit a class called class2 from class1. In class2, you add a Sub procedure to calculate the cube of the value stored in the variable num and another Sub procedure called display() to display the calculated value stored in num. Next, you add a button to the form Form1 and declare an object of class2 in the click event of

Page 122: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 17

cbCompDrome.Checked = False

cmbCourse.Text = ""

lstTimeSlot.SelectedIndex = 0

End If

7. In the event handler for the Click event of the Close button, type the following code:

Close()

8. Select Debug Start to execute the application.

Lesson Three

Experiences Start this lesson by asking questions on the object-oriented programming (OOP) concepts that students learned in the first semester. Keep the question-answer session brief. Then, establish a connect between the OOP concepts and Visual Basic .NET. You can also tell students that previous versions of Visual Basic were object-based — they supported objects but did not support direct inheritance. Emphasize that Visual Basic .NET is an object-oriented language similar to C++ and Java.

Explain structures in brief. Explain the similarities and differences between a class and a structure without going into details. Remember that students have learned about structures in C++ in the first semester.

Students have used interfaces in Java. Therefore, ask students to recollect the concepts of interface and then explain the syntax for declaring and using an interface in Visual Basic .NET. You need not go into details. In addition, inform students that they will learn to implement polymorphism using interfaces in Lesson 13.

While teaching students interfaces, distinguish between an interface and user interface to avoid any confusion between the two. You can simply tell students that an interface is a blueprint for the purpose of enforcing functionalities in inherited classes and user interfaces allow interaction between a user and an application.

A namespace is a new concept introduced in Visual Basic .NET. Students should use namespaces and they should understand the importance of namespaces. You can compare namespaces with the concept of packages in Java. Tell students that it is good practice to organize classes into a hierarchy.

While discussing events compare the way events are handled in Java and Visual Basic .NET.

Additional Input

Multicast Delegates

Some delegates, called multicast delegates, maintain a list of references to multiple functions. The signatures of all the functions referenced by a multicast delegate need to be the same.

Shadowing

In Visual Basic .NET, you can use the shadowing concept to protect a derived class from throwing build errors when the base class is modified to include a member, such as a procedure, that has already been

Page 123: 02_VB_NET_CG

16 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

6. In the event handler for the Click event of the OK button, type the following code:

Dim Gender As String

Dim Course As String

Dim TimeSlot As String

Dim Facilities As String

If txtName.Text = "" Or txtAge.Text = "" Or txtAddress.Text = "" or cmbCourse.Text = "" Then

MsgBox("Please enter all details")

Else

If rbMale.Checked Then

Gender = "Male"

ElseIf rbFemale.Checked then

Gender = "Female"

End If

Course = cmbCourse.SelectedItem.ToString

TimeSlot = lstTimeSlot.SelectedItem.ToString

If cbLibrary.Checked Then

Facilities = "Library "

End If

If cbCompDrome.Checked Then

Facilities = Facilities & " Computer Drome"

End If

MsgBox("Name: " + txtName.Text + " Age: " + txtAge.Text + " Address: " + txtAddress.Text + " Gender: " + Gender + " Course: " + Course + " Time slot: " + TimeSlot + " Facilities : " + Facilities)

txtName.Text = ""

txtAge.Text = ""

txtAddress.Text = ""

rbMale.Checked = False

rbFemale.Checked = False

cbLibrary.Checked = False

Page 124: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 15

To create the Student form, perform the following steps:

1. Select Project Add Windows Form.

2. In the Add New Item dialog box, specify the name of the form as Student.vb. Click the Open button.

3. Design the form and set the Name property of various controls, as shown below:

4. Set the MultiLine property of txtAddress to true.

5. Double-click the form and type the following code in the Student_Load() method:

cmbCourse.Items.Add("Web Application Developer")

cmbCourse.Items.Add("Database Administrator")

cmbCourse.Items.Add("Network Administrator")

cmbCourse.Items.Add("Windows Application Developer")

lstTimeSlot.Items.Add("7:00-9:00")

lstTimeSlot.Items.Add("9:00-11:00")

lstTimeSlot.Items.Add("11:00-1:00")

lstTimeSlot.Items.Add("1:00-3:00")

lstTimeSlot.Items.Add("3:00-5:00")

lstTimeSlot.SelectedIndex = 0

txtName

txtAge

txtAddress

rbFemale

cmbCourse

lstTimeSlot

btnClosebtnOk

cbLibrary

cbCompDrome

rbMale

Page 125: 02_VB_NET_CG

14 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Solution: Unguided Practice

UGP 1

1. Select File New Project. This opens the New Project dialog box. In the Project Types pane, select Visual Basic Projects. In the Templates pane, select Windows Application. Name the application 2_UGP_1 and click the OK button.

2. In the Windows Form, create two Label controls and set their Text property to Username and Password, respectively.

3. Create two TextBox controls. Change the Name property of the TextBox controls to txtUserName and txtPassword respectively. Set the PasswordChar property of txtPassword to *.

4. Create a Button control and set its Text property to OK.

5. Create a Label control to display the error message. Set the Name property of the Label control to lblMessage.

6. In the Form1 class, declare a variable called ctr by using the following statement:

Dim Ctr as Integer

7. Double-click the OK button. In the event handler, type the following code:

Dim LoginName As String, Password As String

LoginName = txtUserName.Text

Password = txtPassword.Text

Ctr = Ctr + 1

If LoginName = "Adminuser" And Password = "admin" Then

Dim frmObj As New Student()

frmObj.Show()

Else

If Ctr < 3 Then

lblMessage.Text = "Incorrect User Name or Password - Please Try again"

txtUserName.Focus()

Else

MsgBox("Unauthorized Access. Aborting...")

Close()

End If

End If

Page 126: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 13

2. In the Windows Form, create six Label controls and set their Text property as shown in the following table:

Label Text

Label1 Order Number

Label2 Order Date

Label3 Customer ID

Label4 Product ID

Label5 Cost

Label6 Advance

3. Create five TextBox controls and a ComboBox control. Set the Name property of the TextBox controls to txtOrderNo, txtOrderDate, txtCustID, txtCost, and txtAdvance. Set the Name property of the ComboBox control to cmbProdID.

4. Create a Button control and set its Text property to Save.

5. Double-click the form and type the following code in the Load event of the form to add items in the ComboBox control:

cmbProdID.Items.Add("P001")

cmbProdID.Items.Add("P002")

cmbProdID.Items.Add("P003")

cmbProdID.Items.Add("P015")

6. Type the following code in the Click event of the Button control:

If txtOrderNo.Text = "" Or txtOrderDate.Text = "" Or txtCustID.Text = "" Or cmbProdID.Text = "" Or txtCost.Text = "" Or txtAdvance.Text = "" Then

MsgBox("Please enter all details")

Else

MsgBox("Saved Data")

End If

7. Select Debug Start to start the application and check whether the application works as per the requirements.

Page 127: 02_VB_NET_CG

12 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Solutions: Just a Minute… 1. Write a loop structure to display all odd numbers between 1 and 100.

Ans:

Dim ctr as Integer

for ctr=1 to 100

If ctr mod 2 <> 0 Then

Msgbox (ctr)

End If

Next

2. Write the construct to check whether the character stored in the variable X is a vowel and display an appropriate message.

Ans:

Dim X As Char

X = "a"

If X = "a" Or X = "e" Or X = "i" Or X = "o" Or X = "u" Then

MsgBox("Vowel")

Else

MsgBox("Not a Vowel")

End If

3. You have created two forms named Form1 and Form2. Write the code so that when a user clicks the OK button in Form1, Form2 should be displayed.

Ans:

Dim Form2obj as New Form2()

Form2obj.show()

Solution: Guided Practice

2.P.1 1. Select File New Project. This opens the New Project dialog box. In the Project Types

pane, select Visual Basic Projects. In the Templates pane, select Windows Application. Name the application as 2_P_1 and click the OK button.

Page 128: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 11

Additional Inputs

Demos

The demo for this lesson is stored in the Solutions\Lesson2\2.D.1 folder.

The Static Keyword

The variables that are local to a procedure are destroyed after all the statements in the procedure are executed. However, in several cases, you need to preserve the value of a variable after the procedure has been executed. This is especially useful if you need to know the number of times a procedure has been called. To do so, you can declare a variable by using the Static keyword inside the procedure. The value of a variable declared as Static is maintained across procedure calls. Thus, you can increment the variable to maintain a count of the number of times the procedure has been executed.

Comparing Visual Basic 6.0 and Visual Basic .NET Language Features

If students know Visual Basic 6, you can also discuss some major language changes. State that while earlier versions of Visual Basic were targeted at Microsoft Windows client applications, Visual Basic .NET is intended for creating Web applications as well. For this purpose, Visual Basic .NET generates managed code for the Common Language Runtime. This entails changes to the language itself. Some of the language feature changes are listed below:

In Visual Basic 6, you could create a fixed-length string by using a statement given below:

Dim str as string * 30

However, in Visual Basic .NET, you cannot declare a string to have a fixed length. Therefore, the above example would display an error.

Another major change is in the way in which the ReDim keyword is used. In Visual Basic 6.0, the ReDim keyword could be used in the initial declaration of the array. However, in Visual Basic .NET, ReDim cannot be used to declare an array. You must first use the Dim keyword to declare an array and then use the ReDim keyword if you want to resize the array.

The Variant data type that was available in Visual Basic 6.0 is no longer supported in Visual Basic .NET.

The Wend keyword of Visual Basic 6.0 is replaced with the End While keyword in Visual Basic .NET.

FAQs 1. Which data type can be used in a Visual Basic .NET application as a replacement of the Variant

data type provided in Visual Basic 6.0?

Ans: The Variant data type of Visual Basic 6.0 can be replaced with the Object data type in Visual Basic .NET.

Page 129: 02_VB_NET_CG

10 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

Ans: Managed code is the code that is managed by the CLR. In other words, managed code is written to target the CLR. All code written in Visual Basic and C# is managed by default. Unmanaged code, on the other hand, does not benefit from the features provided by the CLR, such as garbage collection and type safety.

8. Is it possible to monitor the activities and performance of the CLR?

Ans: Yes. You can use Perfmon.exe in Windows 2000 to monitor the activities and performance of the CLR. Expand the Performance Logs and Alerts node. Double-click System Overview. In the System Overview Properties dialog box, click the Add button. In the Select Counters dialog box, select the Performance object drop-down list. This list displays various objects, such as .NET CLR Interop and .NET CLR Memory. You can add these objects and monitor the activities and performance of the CLR.

Solutions: Just a Minute… 1. What are the various components of the .NET Framework?

Ans: The .NET Framework consists of Web Forms, Windows Forms, and Console applications that pertain to the presentation layer of an application. Besides these three components, the .NET Framework consists of two other components, the .NET Framework Base Classes and the Common Language Runtime (CLR).

2. What is an assembly?

Ans: An assembly is a single deployable unit that contains all the information about the implementation of classes, structures, and interfaces. An assembly stores all the information about itself. This information is called metadata, and it includes the name and version number of the assembly, security information, information about the dependencies, and a list of the files that constitute an assembly.

Lesson Two

Experiences Start the session by discussing different types of user interfaces. Specify that unlike in Visual Basic 6, you can create console applications in Visual Basic .NET. These applications are CUI-based. You can also create GUI-based applications in Visual Basic .NET by using Windows Forms and controls. Explain what are Windows Forms. Explain their properties, events, and methods.

After explaining Windows Forms, state that Windows Forms and controls do not provide much functionality by themselves. You need to write code to provide functionality. While writing code, you need to use some programming language features such as data types, variables, and looping constructs. Discuss each of the programming constructs. Compare these constructs with the ones used in other programming languages such as C++ and Java.

While discussing the demo, discuss some of the commonly used controls and their properties, methods, and events. Demonstrate the creation of controls by dragging them from the Toolbox and dropping them on the form. Use examples to demonstrate the use of controls and their events.

Page 130: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 9

Execution support: The CLR provides the infrastructure that enables execution to take place as well as a variety of services that can be used during execution.

Analogies and Examples Depending on the profile of students, you may compare the process of compilation and execution of a .NET application with that of a Java application. In case of Java, when you compile the application code, bytecode is generated. The bytecode generated during compilation is platform independent. When you execute the application, the bytecode is interpreted and the application gets executed.

In case of a .NET application, when you compile the application code, it is converted into Intermediate Language (IL), which is CPU-independent. This means that the code can be executed from any platform that supports the .NET CLR. However, unlike bytecode, IL is not interpreted. Instead, the JIT compiler translates the IL code into native code.

FAQs 1. What is the .NET Framework?

Ans: The .NET Framework is an environment for developing, deploying, and executing Windows and Web-based applications. It exists as a layer between .NET applications and the underlying operating system. In other words, the .NET Framework encapsulates much of the basic functionality that was earlier built into various programming languages, such as garbage collection, debugging, and security services.

2. What is the Common Language Runtime (CLR)?

Ans: The Common Language Runtime is the execution engine for .NET Framework applications. It performs a number of functions, such as loading and executing an application, performing automatic memory management, ensuring type safety, and handling exceptions. It is one of the most important components of the .NET Framework.

3. What is the Common Type System (CTS)?

Ans: The Common Type System is a type system built into the CLR. The CTS supports the data types found in most programming languages.

4. What is the Common Language Specification (CLS)?

Ans: The Common Language Specification is a subset of the CTS. It provides guidelines for library developers and compiler writers. It allows developers to create libraries that can be used in any language that supports the CLS.

5. What is MSIL?

Ans: Microsoft Intermediate Language is a CPU-independent instruction set. When you compile a .NET Framework application, it is converted into MSIL. When you execute the .NET Framework application on a computer, the instructions specified in MSIL are translated into the native code. MSIL ensure cross-language integration. Note that MSIL is not interpreted.

6. What is garbage collection?

Ans: Garbage collection is a process that detects objects that are no longer used by an application. It automatically releases the memory associated with the object.

7. What is the difference between managed code and unmanaged code?

Page 131: 02_VB_NET_CG

8 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

After discussing Visual Basic .NET language features, state that you can use Visual Studio .NET to develop applications in Visual Basic .NET. Discuss all the components of the Visual Studio .NET IDE. State that Visual Studio .NET provides a common IDE across multiple languages, such as Visual C# and Visual Basic .NET. This is unlike Visual Studio 6.0, which provided a separate IDE for Visual Basic 6.0 and Visual InterDev. The common IDE enables the use of the same set of application development tools in different languages, thus simplifying the learning curve.

Explain the concept of projects and solutions in Visual Studio .NET. Demonstrate how each component of the IDE can be used in application development. It is important for students to be familiar with all these components, as they will use the IDE in all the other lessons. If time permits, allow students to create their own projects and explore the features of the IDE.

Additional Inputs

Toolbox

The Toolbox contains various tabs. These tabs categorize controls, thereby making it easy to locate various controls. The following table describes various tabs:

Tab Description

Data Displays objects that can be added to a Windows Form or a component. These objects allow you to connect to a database and retrieve and manipulate data.

Components Displays the components that you can add to a Windows Form. It displays some predefined components, such as EventLog and MessageQueue.

Windows Forms Displays a list of Windows Forms controls, such as a label, a text box, and a button. These controls are arranged based on their estimated frequency of use.

Clipboard Ring Displays the text that is cut or copied in the Code Editor window. You can view the contents of the Clipboard Ring by clicking the Clipboard Ring tab of the Toolbox. The clipboard recalls the last 15 text items that were cut or copied. This is a powerful feature for quickly copying several pieces of text to a new location or for recalling text that you inadvertently cut.

General Used to store the default controls for a project. You can drag controls from other tabs to this tab. You can also add custom controls to this tab.

Common Language Runtime

The .NET Framework provides a run-time environment called Common Language Runtime for managing the execution of code. Programming language compilers expose the functionality of the runtime and allow you to write code that benefits from the services provided by the runtime. Code developed with a language compiler that targets the CLR is known as managed code. The services provided by the CLR include:

Garbage collection: The CLR provides the garbage collection feature for managing the lifetime of an object.

Common Type System (CTS): The CTS provides rules that language compilers follow with respect to defining, referencing, using, and storing types.

Security: The CLR ensures that code can perform only those tasks for which it has permissions.

Page 132: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 7

LESSON-SPECIFIC INPUTS

Lesson One

Experiences Depending on the profile of students, you may start the session by discussing Windows Distributed interNet Architecture (DNA) and its limitations. Then, you can discuss how the new .NET initiative tries to solve these problems. A typical DNA-based application comprises three-tiers:

The presentation tier – This tier deals with user interfaces for Windows and Web applications.

The middle tier – This tier encapsulates business logic. It handles interaction with the client on one hand, and interacts with data repositories on the other. Components in this tier interact with a variety of protocols and other components to send data to the data tier.

The data tier – This tier has components that store data. In addition it contains logic to process, retrieve, and validate data.

Today most software that run on Windows are based on the DNA model. However, there are several limitations of the DNA model. They are as follows:

Applications rely heavily on the COM components on the server and sometimes on the clients as well. Developing COM components is a complex task in most languages. In addition, COM is difficult to deploy. For example, many a times, you might have applications that use the same COM component. However, while you are installing a new application, the newer version of the component might get installed. In such a case, the newly installed application may work well. However, the existing applications that depend on the older version of the component could stop functioning. This conflict is caused because the system does not keep track of the versions of different components used by different applications. In addition, the applications also do not specify information about the version of a component that it uses. This results in DLL conflicts.

Each programming language has its own set of data types. Same data type is defined differently in different languages. Thus, passing parameters between applications that are written using different languages becomes a challenge.

The DNA model does not allow you to implement an integrated solution with both Windows- and Web-based user interfaces.

Microsoft’s .NET initiative aims at solving all these problems. For example, it introduces the concept of assemblies to keep track of the versions and dependencies between components.

After discussing the DNA model and the .NET initiative, discuss the components of the .NET Framework. Explain the figure that depicts the .NET Framework components. Discuss the importance of the CLR and state that Visual Basic .NET is a programming language that targets the runtime. This implies that the compiler of any of these languages compiles the code to avail the services offered by the CLR.

Discuss the features of the Visual Basic .NET language. Stress the fact that Visual Basic .NET is an object-oriented language. It supports all features of object-orientation, such as inheritance, polymorphism, abstraction, and encapsulation.

Page 133: 02_VB_NET_CG

6 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

ensure that an application does not access the address space of another application. In the .NET Framework, the CLR uses application domains to isolate applications. Thus, an application domain is a secure unit of processing in the .NET Framework.

Microsoft .NET Remoting provides a framework to allow objects to interact with other objects residing in different application domains, different processes, and on different computers. .NET remoting provides services, such as channels, formatters, object activation and life cycle, and object registration to achieve interaction between remote objects. Channels are used as transport mediums when a client invokes a method of a remote object. A remote object may provide more than one channel. The client can select the channel that best suits its requirement. Formatters are used to encode and decode messages before the channel transports the messages.

9. Are there any certifications for Visual Basic .NET?

Ans: No. Currently there are no certifications for Visual Basic .NET. However, the concepts covered in this module map to the objectives of the Microsoft Visual Basic 6.0 Desktop exam.

Page 134: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 5

FAQS 1. What is .NET?

Ans: Microsoft's latest and ambitious initiative is commonly called .NET. Microsoft has introduced the .NET initiative with the intention of bridging the gap in interoperability between applications. It aims at integrating various programming languages and services. It is designed to make significant improvements in code reuse, code specialization, resource management, multi-language development, security, deployment, and administration.

2. What is the .NET Framework?

Ans: The .NET Framework is a new platform designed for easy application development. The .NET framework has two main components, the Common Language Runtime and the .NET class library. The Common Language Runtime manages the application code by supporting services, such as memory management and thread management. The .NET class library is a collection of reusable classes that can be used for developing applications.

3. On what platforms does the .NET Framework run?

Ans: The of the .NET Framework runs on Windows NT, Windows 2000, Windows 9x, and Windows ME.

4: Which programming languages are supported by the .NET Framework?

Ans: Any language can target the .NET Framework. Currently, you can build .NET programs in a number of languages, such as C++, Visual Basic .NET, JScript, and C#. Some third-party languages will also be available in the future for developing .NET Framework applications. These languages include COBOL, Eiffel, Perl, Python, and Smalltalk.

5. What is Visual Basic .NET?

Ans: Visual Basic .NET is the latest version of Visual Basic that allows easy creation of Web and n-tier applications. It supports features, such as Windows and Web Forms, ADO.NET for database connectivity, improved type safety, object-oriented features, and visual inheritance, that can help you create and deploy scalable Web sites.

6. Is Visual Basic .NET 100% compatible with Visual Basic 6.0?

Ans: Visual Basic .NET has been built from the ground up on the .NET platform to provide full access to the new platform. Now, the Visual Basic code can interoperate with the code written in other languages, such as Visual C#. For example, Visual Basic .NET has the same arrays and variable types as any other language that uses the Common Language Runtime. Some features, such as non-zero based arrays, GoSub, and DefInt have been removed from the language to make Visual Basic .NET the most productive tool for creating Windows-based applications and Web sites.

7. How can I upgrade a Visual Basic 6 application to Visual Basic .NET?

Ans: Visual Basic .NET allows you to upgrade from traditional Windows development by providing an upgradation wizard. The upgradation wizard is discussed in the Appendix of the Student Guide.

8. What is .NET Remoting?

Ans: Operating systems and run-time environments provide application isolation to ensure that the code in one application does not adversely affect another application. Isolating applications helps

Page 135: 02_VB_NET_CG

4 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

EXIT PROFILE At the end of this module, the student will be able to:

Create Windows Forms

Use Visual Basic .NET programming language features to specify the application logic

Create and instantiate a class

Create an inherited form

Use CommonDialog classes in an application

Connect to a database by using ADO.NET components

Access data from a database and bind it to a Windows Form

Display filtered data in a Windows Form

Update database records

Create a Crystal Report to display summarized data

Create menus

Create MDI forms

Perform File I/O operations

Implement multi-threading operations in Visual Basic .NET

Handle errors while accessing data

Trace and debug errors in a Windows Form application

Provide application assistance by creating Help

Create reusable components and use them in an application

Create and use user controls

Create an ASP.NET Web service

Use an ASP.NET Web service in Windows and Web-based applications

Deploy a Windows application

Deploy a component

Deploy a Web service

Page 136: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 3

ENTRY PROFILE A student who registers for the Visual Basic .NET module should be able to perform the following tasks:

Knowledge of any OOP language

Create tables and execute SQL queries

Work in Windows environment

Interact in English in a classroom environment

Page 137: 02_VB_NET_CG

2 Programming in Visual Basic .NET-Coordinator Guide ©NIIT

OBJECTIVES This module will familiarize students with the following:

Using the Visual Studio .NET IDE to develop Visual Basic .NET applications

Creating Windows Forms

Using object-oriented programming features in Visual Basic .NET

Creating procedures

Using CommonDialog classes

Retrieving and manipulating the data stored in a database by using ADO.NET

Generating reports

Creating MDI applications

Creating menus

Performing file I/O

Creating multithreaded applications

Handling exceptions

Debugging applications

Creating application assistance

Creating and using components

Creating user controls

Creating and using Web services

Deploying an application

Page 138: 02_VB_NET_CG

©NIIT Programming in Visual Basic .NET-Coordinator Guide 1

RATIONALE

Why This Module Most of the current applications meet the requirements of their users. However, they do not offer interoperability with other applications that run on different platforms. Microsoft has introduced the .NET initiative with the intension of bridging the gap in the interoperability between applications running on different platforms. .NET is Microsoft’s strategy for delivering software as a Web service. A Web service is a reusable component that can be accessed by a number of applications regardless of the platforms used to develop the applications.

Visual Basic .NET is one of the programming languages that have been introduced as a part of the .NET initiative. Visual Basic .NET provides a number of programming language features that can be used to create powerful Windows- and Web-based applications.

In this module, students will be introduced to the .NET initiative. They will learn about the .NET Framework and its components. Then, students will learn to use Visual Studio .NET to develop Visual Basic .NET applications. They will learn to use various features of Visual Basic .NET to create Windows applications and Web services.