In this article, we are going to:
- Create a database.
- Create stored procedures.
- Create a WPF application in VB.NET.
- Perform CRUD operations.
Create a Database
Open SQL Server 2016. Then, click the New Query window and run the below query.
USE [test] GO /****** Object: Table [dbo].[EmployeeMaster] Script Date: 5/7/2017 8:07:35 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[EmployeeMaster]( [Id] [numeric](18, 0) IDENTITY(1,1) NOT NULL, [EmployeeCode] [bigint] NULL, [EmployeeName] [varchar](150) NULL, [EmployeeDob] [datetime] NULL, [EmployeeAddress] [varchar](500) NULL ) ON [PRIMARY]
Create Stored Procedures
You’ve probably used Entity Framework, but I have written the stored procedure for my data operations, so run the below SP.
CREATE PROCEDURE [dbo].[EmpMaster_SP] @ID NUMERIC(18,0)=NULL, @EmpCode BIGINT=NULL, @EmpName VARCHAR(150)=NULL, @DOB DATETIME=NULL, @Address VARCHAR(500)=NULL, @Mode VARCHAR(10) AS BEGIN SET NOCOUNT ON; IF (@Mode='ADD') BEGIN INSERT INTO EmployeeMaster (EmployeeCode,EmployeeName,EmployeeDob,EmployeeAddress) VALUES(@EmpCode,@EmpName,@DOB,@Address) END IF (@Mode='EDIT') BEGIN UPDATE EmployeeMaster SET EmployeeCode=@EmpCode,EmployeeName=@EmpName,EmployeeDob=@DOB,EmployeeAddress=@Address WHERE ID=@ID END IF (@Mode='DELETE') BEGIN DELETE FROM EmployeeMaster WHERE ID=@ID END IF (@Mode='GET') BEGIN SELECT Id,EmployeeCode,EmployeeName,CONVERT(VARCHAR(10), EmployeeDob)EmployeeDob,EmployeeAddress FROM EmployeeMaster END IF (@Mode='GETID') BEGIN SELECT Id,EmployeeCode,EmployeeName, EmployeeDob,EmployeeAddress FROM EmployeeMaster WHERE ID=@ID END
Create a WPF Application in VB.NET
Open Visual Studio 2015. Go to New Project > Visual Basic (under templates) > WPF Application.
After creating the application, open the Solution Explorer, which appears like the below image. Now, we are ready to create our design screen.
Here, I am using simple WPF controls:
- Textbox.
- Rich textbox.
- Button.
- Datagrid.
- Label.
- Date picker.
Then, write the following XAML code in MainWindow.xaml
file.
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:CURD_Gridvb" mc:Ignorable="d" Title="CURD" Height="700" Width="900" Background="DarkGray"> <Grid Background="#FF474747"> <Rectangle Fill="#FF66512F" HorizontalAlignment="Left" Height="165" Margin="76,40,0,0" Stroke="Black" VerticalAlignment="Top" Width="779"/> <Label x:Name="label" Content="Employee Code" HorizontalAlignment="Left" Margin="90,81,0,0" VerticalAlignment="Top" Foreground="#FFEADCDC" FontWeight="Bold" FontFamily="Tahoma"/> <TextBox x:Name="txtCode" HorizontalAlignment="Left" Height="30" Margin="202,75,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="170" FontSize="14"/> <Label x:Name="label_Copy" Content="Employee Name" HorizontalAlignment="Left" Margin="417,81,0,0" VerticalAlignment="Top" RenderTransformOrigin="3.602,0.615" Foreground="#FFEADCDC" FontWeight="Bold" FontFamily="Tahoma"/> <TextBox x:Name="txtName" HorizontalAlignment="Left" Height="30" Margin="550,75,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="235" FontSize="14"/> <Label x:Name="label_Copy1" Content="DOB" HorizontalAlignment="Left" Margin="90,134,0,0" VerticalAlignment="Top" Foreground="#FFEADCDC" FontWeight="Bold" FontFamily="Tahoma"/> <DatePicker x:Name="txtDate" HorizontalAlignment="Left" Margin="202,139,0,0" VerticalAlignment="Top" Width="170" Height="30" FontSize="14"/> <Label x:Name="label_Copy2" Content="Employee Address" HorizontalAlignment="Left" Margin="417,134,0,0" VerticalAlignment="Top" RenderTransformOrigin="3.602,0.615" Foreground="#FFEADCDC" FontWeight="Bold" FontFamily="Tahoma"/> <RichTextBox x:Name="rtxtAddress" HorizontalAlignment="Left" Height="75" Margin="550,117,0,0" VerticalAlignment="Top" Width="235" FontSize="14"> <FlowDocument> <Paragraph> <Run Text=""/> </Paragraph> </FlowDocument> </RichTextBox> <Rectangle Fill="#FF472828" HorizontalAlignment="Left" Height="55" Margin="76,220,0,0" Stroke="Black" VerticalAlignment="Top" Width="755"/> <Button x:Name="btnAdd" Content="Add" HorizontalAlignment="Left" Margin="119,230,0,0" VerticalAlignment="Top" Width="166" RenderTransformOrigin="-0.053,0" Height="35" Foreground="#FF0C0A0A" FontWeight="Bold" BorderBrush="#FFFFF4F4" /> <Button x:Name="btnUpdate" Content="Update" HorizontalAlignment="Left" Margin="339,230,0,0" VerticalAlignment="Top" Width="175" RenderTransformOrigin="-0.053,0" Height="35" Foreground="Black" BorderBrush="#FFF7F6F5" /> <Button x:Name="btnDelete" Content="Delete" HorizontalAlignment="Left" Margin="550,230,0,0" VerticalAlignment="Top" Width="170" RenderTransformOrigin="-0.003,0" Height="35" Foreground="#FF111010" /> <Rectangle Fill="#FF0E2727" HorizontalAlignment="Left" Height="270" Margin="76,300,0,0" Stroke="Black" VerticalAlignment="Top" Width="755"/> <DataGrid x:Name="dgEmp" Height="270" AutoGenerateColumns="False" RowHeight="25" GridLinesVisibility="Vertical" HeadersVisibility="All" RowBackground="WhiteSmoke" AlternatingRowBackground="LightGray" IsReadOnly="True" Margin="76,300,61,99" > <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Id}" Width="130" Header="Employee Id"/> <DataGridTextColumn Binding="{Binding EmployeeCode}" Width="130" Header="Employee Code"/> <DataGridTextColumn Binding="{Binding EmployeeName}" Width="200" Header="Employee Name"/> <DataGridTextColumn Binding="{Binding EmployeeDob}" Width="100" Header="DOB"/> <DataGridTextColumn Binding="{Binding EmployeeAddress}" Width="200" Header="Employee Address"/> </DataGrid.Columns> </DataGrid> <Label x:Name="label_Copy3" Content="Employee Id" HorizontalAlignment="Left" Margin="90,45,0,0" VerticalAlignment="Top" Foreground="#FFEADCDC" FontWeight="Bold" FontFamily="Tahoma"/> <Label x:Name="lblEmpId" Content="" HorizontalAlignment="Left" Margin="202,45,0,0" VerticalAlignment="Top" Foreground="#FFEADCDC" FontWeight="Bold" FontFamily="Tahoma"/> </Grid> </Window>
Perform CRUD Operations
Create a Model
folder in Solution Explorer and create a new VB.Class
there.
Public Class Employee Public Property EmployeeCode As Int32 Public Property EmployeeName As String Public Property DOB As Date Public Property Address As String End Class
Declare global variables and connection strings in the class.
Imports System.Data Imports System.Data.SqlClient Imports CURD_Gridvb.Employee
You can validate the textbox and rich textbox controls and add, update, and Delete events.
If (txtCode.Text = String.Empty) Then MessageBox.Show("Enter the Employee Code") Return End If If (txtName.Text = String.Empty) Then MessageBox.Show("Enter the Employee Name") Return End If If (txtDate.Text = String.Empty) Then MessageBox.Show("Enter the Employee Name") Return End If Dim EmpAddress As String EmpAddress = New TextRange(rtxtAddress.Document.ContentStart, rtxtAddress.Document.ContentEnd).Text.ToString() If (EmpAddress = String.Empty) Then MessageBox.Show("Enter the Employee Name") Return End If
Copy and paste the below code in the “add” button event.
Try Dim Emp As New Employee Emp.EmployeeCode = Convert.ToInt32(txtCode.Text) Emp.EmployeeName = UCase(txtName.Text.Trim()) Emp.DOB = Convert.ToDateTime(txtDate.Text) Emp.Address = EmpAddress SqlCon = New SqlConnection(connectionString) SqlCmd.Connection = SqlCon SqlCmd.CommandText = "EmpMaster_SP" SqlCmd.CommandType = CommandType.StoredProcedure SqlCmd.Parameters.AddWithValue("Mode", " ADD") SqlCmd.Parameters.AddWithValue("EmpCode", Emp.EmployeeCode) SqlCmd.Parameters.AddWithValue("EmpName", Emp.EmployeeName) SqlCmd.Parameters.AddWithValue("DOB", Emp.DOB) SqlCmd.Parameters.AddWithValue("Address", Emp.Address) SqlCon.Open() SqlCmd.ExecuteNonQuery() SqlCmd.Parameters.Clear() SqlCon.Close() Load_Grid() MessageBox.Show("Updated Successfully") Catch ex As Exception MessageBox.Show(ex.Message.ToString()) End Try
I will reuse the same method & passing different mode to SP for each event (Update & Delete).
SqlCmd.Parameters.AddWithValue("Mode", "EDIT") OR SqlCmd.Parameters.AddWithValue("Mode", "DELETE") SqlCmd.Parameters.AddWithValue("ID", Convert.ToInt32(lblEmpId.Content))
Let’s retrieve the data from database using DataGrid. Load_Grid
calls to all the events.
Public Sub Load_Grid() Try SqlCon = New SqlConnection(connectionString) SqlCmd.Connection = SqlCon SqlCmd.CommandText = "EmpMaster_SP" SqlCmd.CommandType = CommandType.StoredProcedure SqlCmd.Parameters.AddWithValue("Mode", "GET") SqlCon.Open() SqlDa = New SqlDataAdapter(SqlCmd) Dt = New DataTable("Employee") SqlDa.Fill(Dt) dgEmp.ItemsSource = Dt.DefaultView SqlCmd.Parameters.Clear() SqlCon.Close() Catch ex As Exception MessageBox.Show(ex.Message.ToString()) End Try End Sub
You must use Binding="{Binding XXX}"
in VB.Net WPF DataGrid control.
<DataGrid.Columns> <DataGridTextColumn Binding="{Binding Id}" Width="130" Header="Employee Id"/> <DataGridTextColumn Binding="{Binding EmployeeCode}" Width="130" Header="Employee Code"/> <DataGridTextColumn Binding="{Binding EmployeeName}" Width="200" Header="Employee Name"/> <DataGridTextColumn Binding="{Binding EmployeeDob}" Width="100" Header="DOB"/> <DataGridTextColumn Binding="{Binding EmployeeAddress}" Width="200" Header="Employee Address"/> </DataGrid.Columns>
In DataGrid, by using the mousedoubleclick
event for editing the recorders, data can be retrieved by employee ID.
Try SqlCon = New SqlConnection(connectionString) Dim Drv As DataRowView = DirectCast(dgEmp.SelectedItem, DataRowView) Dim Fd As New FlowDocument Dim Pg As New Paragraph SqlCmd.Connection = SqlCon SqlCmd.CommandText = "EmpMaster_SP" SqlCmd.CommandType = CommandType.StoredProcedure SqlCmd.Parameters.AddWithValue("Mode", "GETID") SqlCmd.Parameters.AddWithValue("ID", Convert.ToInt32(Drv("ID"))) SqlCon.Open() Dim sqlReader As SqlDataReader = SqlCmd.ExecuteReader() If sqlReader.HasRows Then While (sqlReader.Read()) lblEmpId.Content = sqlReader.GetValue(0).ToString() txtCode.Text = sqlReader.GetValue(1) txtName.Text = sqlReader.GetString(2) txtDate.Text = sqlReader.GetDateTime(3) Pg.Inlines.Add(New Run(sqlReader.GetString(4).ToString())) Fd.Blocks.Add(Pg) rtxtAddress.Document = Fd End While End If SqlCmd.Parameters.Clear() SqlCon.Close() Catch ex As Exception MessageBox.Show(ex.Message.ToString()) End Try
After completing the above steps, run the application.
Conclusion
In this article, we saw how to perform WPF CRUD operations using VB.NET. If you have any queries, please comment below.
Leave a Reply