DataGridView – Sequência de Movimento (Após tecla ENTER)
A DataGridView tem como movimento
após a tecla ENTER, de linha em linha, e não de coluna em coluna. Quando se está
a preencher registos, em que se preenche um registo de cada vez, é prático que o
utilizador após pressionar a tecla ENTER desloque a selecção para a coluna seguinte
e não para o próximo registo (próxima linha).
Para conseguirmos alterar este comportamento
podemos, no evento KeyDown, verificar qual a tecla pressionada e alterá-la. No entanto,
e se a célula estiver a ser editada, é necessário fazer o
override à ProcessCmdKey.
Fica um exemplo de como fazer:
Protected Overrides
Function ProcessCmdKey(ByRef msg
As System.Windows.Forms.Message, ByVal
keyData As System.Windows.Forms.Keys)
As Boolean
'
Verifica se a tecla pressionada foi a ENTER e se a célula está a ser editada
If
keyData = Keys.Enter And
Me.DataGridView1.IsCurrentCellInEditMode Then
'
Executa um TAB
SendKeys.Send("{TAB}")
' Ignora a tecla
pressionada
Return True
Else
' Executa o processo normal
Return
MyBase.ProcessCmdKey(msg, keyData)
End If
End Function
' Quando é pressionada uma tecla
Private Sub DataGridView1_KeyDown(ByVal
sender As Object,
ByVal e As System.Windows.Forms.KeyEventArgs)
Handles DataGridView1.KeyDown
'
Verifica se a tecla é a ENTER
If
e.KeyCode = Keys.Enter Then
'
Desabilita a tecla pressionada
e.SuppressKeyPress = True
With
Me.DataGridView1
' Caso seja a ultima coluna
salta para a primeira da próxima linha
If .CurrentCell.ColumnIndex
= .ColumnCount - 1 Then
' Caso não seja
a última linha
If .CurrentRow.Index < .RowCount - 1 Then
.CurrentCell = .Item(0, .CurrentRow.Index + 1)
End If
Else
' Move para a próxima coluna
.CurrentCell = .Item(.CurrentCell.ColumnIndex + 1, .CurrentRow.Index)
End If
End With
End If
End Sub
@@IDENTITY – Verificando Registo Inserido
Quando se inserem registos, é frequente
necessitarmos do último número de identificação inserido (ID) para mostrarmos ao
utilizador ou para utilizarmos na inserção de outros registos. Por exemplo se inserirmos
um novo utilizador e de seguida usarmos o seu número de registo para inserir a sua
lista de favoritos, temos de efectuar os seguintes passos:
1 – Inserir o registo do utilizador
2 – Verificar-mos qual o registo inserido
(ID)
3 – Inserir os favoritos utilizando
o ID recolhido
Para simplificar este processo podemos
utilizar o comando T-SQL -
@@IDENTITY - que retorna o valor gerado pelo
SQL Statement. Ou seja, no momento que inserimos o registo, verificamos
qual o número do registo inserido.
Fica aqui um exemplo de como simplificar
este processo:
' Texto de ligação à base de dados
Dim myConnectionString As String = _
"Data Source=.\SQLEXPRESS;AttachDbFilename='c:\MYDATABASE.MDF';"
& _
";Integrated Security=True;User Instance=True"
'
Comando que irá inserir dados na tabela "MyTable" em que o campo "username" será
' passados através de parâmetros e retornará
o ID do registo inserido
Dim SQL As
String = "INSERT INTO myTable([username]) VALUES
(@username); Select @@IDENTITY;"
'
Cria uma nova ligação à base de dados
Dim connection As
New SqlConnection(myConnectionString)
'
Criação do comando indicando a instrução e a ligação
Dim command As
New SqlCommand(SQL, connection)
command.Parameters.Add("@username", SqlDbType.VarChar).Value =
"teste"
connection.Open()
' Insere o registo e guarda na variável
IdRegistoInserido o ID
Dim IdRegistoInserido As Integer = command.ExecuteScalar()
Debug.WriteLine("Registo Inserido:
" + IdRegistoInserido.ToString)
' Fecha a ligação e limpa as variáveis
connection.Close()
connection = Nothing
command = Nothing
Deste modo reduzimos
um processo, de verificação do registo inserido, melhorando a performace da aplicação.
PS: Como sempre, qualquer
dúvida, comentário ou correcção ao artigo é sempre bem vinda!
1 comentários:
muito obrigado pela dica sobre como controlar a tecla enter numa datagrid.
PARABENS
Enviar um comentário