VB .NET - Consultando o SQL Server a partir do MonthCalendar (DateSelected)
No artigo de hoje vou mostrar como podemos vincular uma data selecionada no controle MonthCalendar com informações armazenadas em uma tabela do SQL Server. |
A classe MonthCalendar representa o controle MonthCalendar do VB .NET e no artigo VB.NET - Usando o controle MonthCalendar - Macoratti.net eu abordei as principais propriedades e métodos deste controle.
Neste artigo eu vou mostrar como podemos acessar informações de uma tabela do SQL Server e exibi-las em um controle DataGridView com base em datas selecionadas em um controle MonthCalendar.
O evento DateSelected ocorre quando o usuário realizar a seleção de uma data no controle MonthCalendar.
Em nosso exemplo vamos usar esse evento para permitir ao usuário selecionar uma data e com base nesta data vamos recuperar informações de uma tabela do SQL Server.
Para capturar a data selecionada vamos usar a propriedade SelectionRange que obtém ou define o intervalo de datas para um controle de calendário do mês selecionado.
Assim para obter a data inicial selecionada podemos usar o seguinte código : MonthCalendar1.SelectionRange.Start
As consultas serão realizadas usando o banco de dados Cadastro.mdf criado no SQL Server e a tabela Alunos que tem a seguinte estrutura:
USE [Cadastro]
GO
CREATE TABLE [dbo].[Alunos](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nome] [nvarchar](50) NOT NULL,
[Email] [nvarchar](100) NULL,
[Idade] [int] NULL,
[DataInscricao] [datetime] NULL,
[Sexo] [nchar](1) NULL,
CONSTRAINT [PK__Alunos__15502E78] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Observe que o campo DataInscricao é do tipo DateTime. |
Nota: Ao lado temos o script para criar a tabela no SQL Server Management Studio
Para testar inclui alguns dados na tabela conforme abaixo:
Vamos usar a coluna DataInscricao para realizar a consulta de dados na tabela comparando-a com a data selecionada no MonthCalendar pelo usuário.
Recursos usados :
Criando o projeto no VS 2013 Express Edition
Abra o VS 2013 Express for Windows desktop e clique em New Project;
A seguir selecione Visual Basic -> Windows Forms Application;
Informe o nome ConsultaDados_Agenda e clique no botão OK;
No formulário form1.vb vamos incluir os seguintes controles a partir da ToolBox:
1 MonthCalendar - name=mCalendario
1 DataGridView - dgvDados
Disponha os controles no formulário conforme o leiaute da figura abaixo:
Vamos criar uma classe que será responsável pela conexão com o banco de dados e pela consulta a tabela no SQL Server retornando um objeto DataTable que iremos exibir no controle DataGridView.
Nota: Para ficar mais aderente ás boas prática o correto seria criar um outro projeto que funcionaria como uma camada de acesso a dados. Também não criamos uma camada de negócios o que é sempre indicado quando acessamos um banco de dados.
No menu PROJECT clique em Add Class e informe o nome AcessoBD e clique no botão Add.
A seguir inclua o código abaixo nesta classe:
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.Data
Public Class AcessoBD
Private Shared Function GetDbConnection() As SqlConnection
Try
Dim conString As String = ConfigurationManager.ConnectionStrings("conexaoAlunoSQLServer").ConnectionString
Dim connection As SqlConnection = New SqlConnection(conString)
connection.Open()
Return connection
Catch ex As Exception
Throw ex
End Try
End Function
Public Overloads Shared Function GetDataTable(ByVal sql As String) As DataTable
Try
Using connection As SqlConnection = GetDbConnection()
Using da As New SqlDataAdapter(sql, connection)
Dim table As New DataTable
da.Fill(table)
Return table
End Using
End Using
Catch
Throw
End Try
End Function
End Class
|
Nossa classe é bem enxuta e possui apenas dois métodos estáticos (Shared) :
Para este código funcionar temos que incluir a string de conexão do banco de dados no arquivo App.Config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="conexaoAlunoSQLServer" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Cadastro;Integrated Security=True"/>
</connectionStrings>
</configuration>
|
Vamos ter que incluir também uma referência no projeto ao namespace System.Configuration.
No menu PROJECT clique em Add Reference e marque o item System.Configuration na janela Reference Manager:
Agora podemos retornar ao nosso formulário form1.vb e definir duas variáveis no início do formulário:
Dim
data As String
Dim sql As String
Após isso defina o código abaixo no evento DateSelected do controle MonthCalendar :
Private Sub MonthCalendar1_DateSelected(sender As Object, e As DateRangeEventArgs) Handles mCalendario.DateSelected
Try
data = mCalendario.SelectionStart.ToString
sql = "Select Id, Nome, Email, DataInscricao from Alunos where DataInscricao = '" & DateTime.Parse(data).ToString("M/d/yyyy") & "' Order By DataInscricao"
dgvDados.DataSource = AcessoBD.GetDataTable(sql)
Catch ex As Exception
MessageBox.Show("Erro :" + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
|
Vamos entender o código :
1- Obtemos a data selecionada pelo usuário a partir da propriedade SelectionStart do MonthCalendar: data = mCalendario.SelectionStart.ToString
2 - Montamos a consulta SQL onde selecionamos o Id,Nome,Email e DataInscricao da tabela Alunos onde o campo DataInscricao deve ser igual à data selecionada no MonthCalendar e ordenamos o resultado pelo campo DataInscricao:
sql = "Select Id, Nome, Email,
DataInscricao from Alunos where DataInscricao = '"
&
DateTime.Parse(data).ToString("M/d/yyyy")
&
"' Order By DataInscricao"
O detalhe na montagem da instrução SQL é que o formato da data obtida tem que ser mm/dd/yyyy e tem que estar entre aspas simples (').
Por isso tivemos que converter a data obtida para esse formato : DateTime.Parse(data).ToString("M/d/yyyy")
Note que na tabela Alunos o campo DataInscricao é do tipo
DateTime e os valores inseridos estão no formato dd/mm/yyyy 00:00:00;
minhas configurações regionais estão definidas para o formato dd/mm/yyyy.
Observe que a data selecionada no calendário foi obtida como string e armazenada na variável data do tipo string.
Executando o projeto e realizando algumas operações iremos obter:
1- Selecionando qualquer data no calendário igual ao campo DataInscricao da tabela Alunos teremos o registro exibido no DataGridView :
Você pode incrementar o código permitindo ao usuário criar vários tipos de consultas por data.
Pegue o projeto completo aqui: ConsultaDados_Agenda.zip
E Jesus lhes
disse: Eu sou o pão da vida; aquele que vem a mim não terá fome, e quem crê em
mim nunca terá sede.
João 6:35
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
TreeView - Arrastar e Soltar (Drag and Drop) - Macoratti.net