Tarefa Orientada 5 Aplic. Manutenção de Facturas de Clientes Objectivos: • Aplicação Manutenção de Facturas de Clientes • Utilização de uma fonte de dados. • Formulários Master/Detail. • Adicionar consultas a um Table Adapter. • Alterar consultas de um Table Adapter • Eliminar colunas de um controlo DataGridView. • Obter o último valor gerado para uma coluna IDENTITY. • Alterar um controlo ToolStrip. Aplicação Manutenção de Facturas de Clientes Neste projecto, vamos implementar uma aplicação de base de dados para gerir as facturas dos clientes de uma pequena editora. Quando a aplicação é iniciada é mostrado o formulário frmFacturasClientes. Neste formulário o utilizador pode procurar um cliente pelo seu identificador ou pelo seu nome, através da barra de ferramentas. Se o utilizador introduzir parte do nome, ou o nome completo, e pressionar o botão procurar correspondente (à direita da caixa de texto onde foi introduzido o nome a pesquisar), é mostrado o formulário frmSeleccionarCliente. Este formulário mostra, numa grelha, todos os clientes cujo nome estão de acordo com o padrão de pesquisa utilizado no formulário frmFacturasClientes para procurar clientes. Visual Studio 2005 1 Depois, o utilizador pode efectuar um duplo toque sobre um registo da grelha para seleccionar um cliente ou, alternativamente, pode seleccionar o registo e, depois pressionar o botão Seleccionar. Em ambos os casos, o controlo vai ser devolvido ao formulário frmFacturasClientes e a informação relativa ao cliente é também mostrada. Após ter sido seleccionado um cliente, o utilizador pode pressionar o botão Alterar Cliente para mostrar o formulário frmManutençãoClientes. Este formulário é utilizado quer para alterar os dados de um cliente já existente, quer para introduzir dados de um novo cliente. O título do formulário muda de acordo com a situação. Após o utilizador ter efectuado as alterações ou ter introduzido os dados de um novo cliente, pode pressionar os botões Aceitar ou Cancelar para gravar ou cancelar as respectivas operações e para voltar ao formulário frmFacturasClientes. O utilizador pode também adicionar um novo cliente pressionando o botão Adicionar Cliente. Como resultado, é mostrado o formulário frmManutençãoClientes, com o título Adicionar Cliente. Depois, o utilizador pode introduzir os dados relativos ao novo cliente e pode pressionar os botões Aceitar ou Cancelar para gravar ou cancelar, respectivamente e para voltar ao formulário frmFacturasClientes. Para eliminar um cliente, o utilizador pode pressionar o botão Eliminar Cliente do formulário frmManutençãoClientes. É mostrada uma caixa de diálogo para confirmar, ou não, a eliminação. Se a operação for confirmada, é removido o cliente correspondente, assim como as respectivas facturas e itens de factura. O formulário frmManutençãoClientes também contém uma grelha onde são mostradas as facturas do cliente seleccionado. O utilizador pode esta grelha para rever as facturas, para mostrar os itens de cada factura, ou para eliminar uma factura. Visual Studio 2005 2 Para visualizar os itens de uma factura, o utilizador pode pressionar duplamente sobre o registo correspondente na grelha ou, alternativamente, pode seleccionar o registo e, depois pressionar o botão Ver Itens Factura. Em ambos os casos, vai ser mostrado o formulário frmItensFactura e a informação relativa à factura é também mostrada. Para eliminar uma factura, o utilizador pode seleccionar, na grelha, o registo relativo à factura e, depois pode pressionar o botão Eliminar Factura. Depois é solicitada a confirmação de remoção. Caso seja confirmada, a factura é eliminada, bem como todos os seus itens. O utilizador pode também adicionar uma factura para o cliente seleccionado. Para tal, deve pressionar o botão Adicionar Factura. Como resultado, é mostrado o formulário frmAdicionarFactura. Neste formulário, o utilizador selecciona um produto na caixa de combinação correspondente, introduz a quantidade na caixa de texto correspondente, e pressiona o botão Adicionar. Como resultado, é acrescentado um item (registo) à grelha deste formulário e são calculados, e mostrados, os totais para a factura. O utilizador também pode eliminar um item desta grelha. Para tal, deve pressionar o botão Eliminar que se encontra à sua direita. Após ter adicionado todos os itens a uma factura, o utilizador pode pressionar o botão Guardar Factura, de modo a que a factura e os seus itens sejam armazenados na base de dados e seja, novamente, mostrado o formulário frmFacturasClientes. O utilizador pode também pressionar o botão Cancelar para voltar ao formulário frmFacturasClientes sem gravar os dados relativos à factura e respectivos itens. Visual Studio 2005 3 Neste projecto, vamos continuar a utilizar o DataSource Configuration Wizard para criar uma fonte de dados. 1 Execute os passos 1 a 5 da tarefa orientada 1, sobre Visual Basic 2005, para criar um novo projecto para uma aplicação Windows. 2 Criação de uma fonte de dados, a partir de uma base de dados no Sql Server, recorrendo ao assistente de configuração. 2.1 Siga os passos 2.1 a 2.12 da tarefa orientada 2 para criar uma fonte de dados. 2.2 Agora escolha os objectos da base de dados para a fonte de dados que vão ser incluídos no DataSet. Expanda o nó associado à caixa de verificação Tables e seleccione as tabelas ClientesED, FacturasED, ItensFacturasED, OpçõesEncomenda, Produtos e Províncias. Visual Studio 2005 4 2.3 Neste passo, pode ainda especificar o nome para o DataSet que vai ser criado. De modo predefinido, este nome é constituído pelo nome da base de dados seguido da palavra DataSet 2.4 Pressione o botão Finish. Terminados os passos do assistente, a nova fonte de dados é mostrada na janela DataSources. Na janela Solution Explorer, é também incluído um ficheiro com o nome que foi atribuído ao DataSet e com a extensão xsd. Este ficheiro contém o esquema para a classe DataSet gerada pelo wizard, isto é, define a estrutura do DataSet. Data Sources Visual Studio 2005 Solution Explorer 5 Formulário frmFacturasClientes Neste formulário o utilizador pode procurar um cliente pelo seu identificador ou pelo seu nome, através da barra de ferramentas e pode, entre outras coisas, visualizar as suas facturas. 3 Desenho do formulário frmFacturasClientes. 3.1 Defina as propriedades Name, Text, AutoScaleMode, StartPosition e File Name com os valores frmFacturasClientes, Manutenção de facturas de clientes, Font, CenterScreen e frmFacturasClientes, respectivamente. Depois de ter criado um uma fonte de dados, vamos criar controlos ligados para aceder aos dados. 3.2 Seleccione, na janela Data Sources, a opção Details da caixa de listagem associada à tabela ClientesED. 3.3 Arraste a tabela ClientesED para o formulário. Como resultado, vão ser criados objectos Label e TextBox ligados a cada uma das colunas da tabela. Visual Studio 2005 6 Como resultado do passo anterior, além dos objectos TextBox e Label, criados para cada coluna da tabela, foram também criados os objectos EditoraDataSet, clientesEDTableAdapter, clientesEDsBindingSource e clientesEDBindingNavigator. Adicionalmente, o Visual Studio liga as caixas de texto e a caixa de combinação às respectivas colunas da tabela. Adicionalmente, o Visual Studio também gera código, que iremos analisar mais à frente. 3.4 Elimine a barra de navegação criada pelo wizard. 3.5 Para todas as caixas de texto recentemente criadas, defina as propriedades BackColor, ReadOnly e TabStop com os valores Control, True e False, respectivamente. 3.6 Adicione três botões ao formulário. Defina as suas propriedades Name, com os valores btnAdicionarCliente, btnAlterarCliente e btnEliminarCliente e Text, com os valores Adicionar Cliente, Alterar Cliente, Eliminar Cliente, de acordo com a figura seguinte (ver pg. 9). Visual Studio 2005 7 3.7 Para criar uma consulta com parâmetros, seleccione uma qualquer caixa de texto do formulário que esteja ligada ao data source. Aceda ao seu menu smart tag e escolha a opção Add query. Vai surgir a caixa de diálogo Search Criteria Builder. 3.8 Atribua o nome FillByIDCliente à nova consulta que está a criar. Visual Studio 2005 8 3.9 Na secção Query Text, introduza o código SQL necessário para que fique de acordo com a figura acima ilustrada. Esta consulta vai ser utilizada para obter os clientes que vão ser mostrados neste formulário e no formulário frmManutençãoClientes. 3.10 Pressione o botão OK. Como resultado, o Visual Studio vai acrescentar, ao formulário, uma barra de ferramentas com uma caixa de texto e um botão para que o utilizador possa introduzir um valor para o parâmetro e depois possa executar a consulta. Note que, adicionalmente, o Visual Studio também gerou código, que iremos analisar mais à frente. Vamos ainda adicionar mais duas consultas ao Table Adapter ClientesEDTableAdapter. 3.11 Seleccione, no DataSet Designer, o Table Adapter ClientesEDTableAdapter com o botão direito do rato. Depois, seleccione o comando Add Query. Visual Studio 2005 9 Utilize o Table Adapter Query Configuration Wizard para criar a consulta. 3.12 No primeiro passo do wizard, seleccione a opção Use SQL statements. 3.13 Pressione o botão Next. Visual Studio 2005 10 3.14 No segundo passo do wizard, seleccione a opção SELECT which returns rows. 3.15 Pressione o botão Next. 3.16 No terceiro passo do wizard, introduza o código SQL necessário para que fique de acordo com a figura abaixo ilustrada. Esta consulta vai ser utilizada para obter os clientes que vão ser mostrados no formulário frmSeleccionarCliente. Note que é usado o operador LIKE na cláusula WHERE, de modo a que seja possível utilizar meta caracteres para representar padrões alfanuméricos. Por exemplo, se o utilizador especificar, na barra de ferramentas para introdução de parâmetros, a cadeia de caracteres ‘Ped%’ para o parâmetro @Nome, irão ser devolvidos os registos dos clientes cujo nome se inicia com as letras Ped. Visual Studio 2005 11 3.17 Pressione o botão Next. 3.18 No quarto passo do wizard, mantenha activada a caixa de verificação Fill a DataTable, atribua o valor FillByNome na caixa de texto Method name e desactive a caixa de combinação Return a DataTable. 3.19 Pressione o botão Finish. Visual Studio 2005 12 Note que, ao criar uma consulta com parâmetros deste modo, não vai ser acrescentada ao formulário uma nova barra de ferramentas para introdução de parâmetros. Vamos agora alterar o aspecto da barra de ferramentas criada no passo 3.10, de modo a que tenha a seguinte apresentação. 3.20 Aceda ao menu smart tag da barra de ferramentas criada no passo 3.10 e seleccione o comando Edit Items. Como resultado, vai ser mostrada a caixa de diálogo Items Collection Editor. 3.21 Na secção Members, Seleccione o botão com o nome FillByIDClienteToolStripButton e, na janela de propriedades do lado Visual Studio 2005 13 direito da caixa de diálogo, defina as propriedades Text e DisplayStyle com os valores Procurar e Text, respectivamente. 3.22 Para adicionar um separador à barra de ferramentas, escolha a opção Separator, na caixa de combinação Select item and add to list below. Depois, pressione o botão Add localizado à direita da caixa de combinação. 3.23 De modo análogo ao anterior, adicione uma legenda (label) à barra de ferramentas. Visual Studio 2005 14 3.24 Na secção Members, Seleccione a legenda acabada de criar e, na janela de propriedades do lado direito da caixa de diálogo, defina as propriedades Name, Text e DisplayStyle com os valores NomeToolStripLabel, Nome e Text, respectivamente. 3.25 Adicione uma caixa de texto (TextBox) à barra de ferramentas e defina a sua propriedade Name com o valor NomeToolStripTextBox. 3.26 Adicione um botão (Button) à barra de ferramentas e defina as suas propriedades Name, Text e DisplayStyle com os valores FillByNomeToolStripButton, Procurar e Text, respectivamente. 3.27 Pressione o botão OK a caixa de diálogo Items Collection Editor. A barra de ferramentas do formulário passa a ter o seguinte aspecto. Para adicionar um controlo DataGridView que mostre os dados de uma tabela relacionada com a tabela principal de um formulário, basta arrastar, da janela Data Source, a tabela subordinada para o formulário. Como resultado, o Visual Studio, além de adicionar a grelha ao formulário, também gera os objectos BindingSource e TableAdapter. Adicionalmente, o Visual Studio também gera código, que analisaremos mais à frente, e define as propriedades (DataSource e DataMember) do objecto BindingSource, de modo a que sejam visualizados os dados da tabela relacionada. 3.28 Na janela Data Sources, expanda a caixa de verificação relativa à tabela ClientesED e arraste a tabela subordinada FacturasED para a parte inferior do formulário frmFacturasClientes. Visual Studio 2005 15 Como resultado do passo anterior, além do objecto DataGridView, foram também criados os objectos FacturasEDTableAdapter e FacturasEDsBindingSource. Visual Studio 2005 16 3.29 Adicione três botões ao formulário. Defina as suas propriedades Name, com os valores btnItensFactura, btnEliminarFactura e btnAdicionarFactura e Text, com os valores Ver Itens da Factura, Eliminar Factura, Adicionar Factura, de acordo com a figura anterior. 3.30 De modo a tornar a grelha apenas disponível para visualização de dados, aceda ao menu smart tag do comando FacturasEDDataGridView e desactive as caixas de verificação Enable Adding, Enable Editing e Enable Deleting. Desactive ainda a caixa de verificação Enable Column Reordering. Vamos ainda adicionar mais uma consulta ao Table Adapter ClientesEDTableAdapter para obter o valor do último identificador de cliente (IDCliente) atribuído pelo SQL SERVER. Note que o atributo IDCliente é uma coluna IDENTITY. 3.31 Seleccione, no DataSet Designer, o Table Adapter ClientesEDTableAdapter com o botão direito do rato. Depois, seleccione o comando Add Query. Visual Studio 2005 17 Utilize o Table Adapter Query Configuration Wizard para criar a consulta. 3.32 No primeiro passo do wizard, seleccione a opção Use SQL statements. 3.33 Pressione o botão Next. Visual Studio 2005 18 3.34 No segundo passo do wizard, seleccione a opção SELECT which returns a single value. 3.35 Pressione o botão Next. 3.36 No terceiro passo do wizard, introduza o código SQL necessário para que fique de acordo com a figura abaixo ilustrada. Esta consulta vai ser utilizada para obter o valor do último identificador de cliente (IDCliente) atribuído pelo SQL SERVER. Para tal, é utilizada a função IDENT_CURRENT(‘Nome_Tabela’). Esta função devolve o último valor gerado para a coluna IDENTITY da tabela especificada no seu argumento. Visual Studio 2005 19 3.37 Pressione o botão Next. 3.38 No quarto passo do wizard atribua o valor ObterÚltimoValorIDENTITY ao nome do método que está a criar. Visual Studio 2005 20 3.39 Pressione o botão Next. 3.40 Pressione o botão Finish. Sempre que desejar alterar uma consulta previamente criada, seleccione-a com o botão direito, no respectivo TableAdapter, e escolha o comando Configure. Visual Studio 2005 21 Formulário frmSeleccionarCliente Este formulário mostra, numa grelha, todos os clientes cujo nome estão de acordo com o padrão de pesquisa utilizado no formulário frmFacturasClientes para procurar clientes. 4 Desenho do formulário frmSeleccionarCliente. 4.1 Adicione um novo formulário ao projecto. Para tal, seleccione a opção Add Windows Form do menu Project. Aparece a caixa de diálogo Add New Item. 4.2 Na secção Templates da caixa de diálogo Add New Item, seleccione a opção Windows Form. Depois introduza o nome para o formulário e pressione o botão Add. Como pode observar na figura anterior, sugerese que utilize o prefixo frm para o nome de cada formulário criado, de modo a que fique claro que o ficheiro gerado contém um formulário. Introduza o nome frmSeleccionarCliente. Visual Studio 2005 22 4.3 Defina as propriedades Text, StartPosition, MaximizeBox, AutoScaleMode e ControlBox do formulário com os valores Seleccionar cliente, CenterScreen, False, Font e False, respectivamente. Vamos agora criar um controlo DataGridView ligado à tabela ClientesED para aceder aos clientes que verificam a condição de pesquisa introduzida no formulário frmFacturasClientes. 4.4 Seleccione, na janela Data Sources, a opção DataGridView da caixa de listagem associada à tabela ClientesED. 4.5 Arraste a tabela ClientesED para o formulário. Como resultado, vai ser criado um objecto DataGridView. Como resultado do passo anterior, além do objecto DataGridView, foram também criados os objectos EditoraDataSet, clientesEDTableAdapter, clientesEDsBindingSource e clientesEDBindingNavigator. Adicionalmente, o Visual Studio liga as caixas de texto e a caixa de combinação às respectivas colunas da tabela. 4.6 Elimine a barra de navegação criada pelo wizard. Visual Studio 2005 23 Adicionalmente, o Visual Studio também gera código, que iremos analisar mais à frente. 4.7 Adicione dois botões ao formulário. Defina as suas propriedades Name, com os valores btnSeleccionar e btnCancelar e Text, com os valores Seleccionar e Cancelar, de acordo com a figura anterior. 4.8 De modo a tornar a grelha apenas disponível para visualização de dados, aceda ao menu smart tag do comando FacturasEDDataGridView e desactive as caixas de verificação Enable Adding, Enable Editing e Enable Deleting. Desactive ainda a caixa de verificação Enable Column Reordering. Visual Studio 2005 24 Formulário frmManutençãoClientes Este formulário é utilizado quer para alterar os dados de um cliente já existente, quer para introduzir dados de um novo cliente. 5 Desenho do formulário frmManutençãoClientes. 5.1 Adicione um novo formulário ao projecto. Para tal, seleccione a opção Add Windows Form do menu Project. Como resultado, aparece a caixa de diálogo Add New Item. 5.2 Na secção Templates da caixa de diálogo Add New Item, seleccione a opção Windows Form. Depois introduza o nome para o formulário e pressione o botão Add. Introduza o nome frmManutençãoClientes. 5.3 Defina as propriedades Text, StartPosition, AutoScaleMode e ControlBox com os valores Manutenção de Clientes, CenterScreen, Font e False. Vamos agora criar controlos TextBox e ComboBox, a partir de uma fonte de dados, recorrendo à janela Data Sources. 5.4 Seleccione, na janela Data Sources, a opção Details da caixa de listagem associada à tabela ClientesED. Deste modo, ao arrastar a tabela ClientesED para o formulário irão ser criados objectos Label e TextBox ligados a cada uma das colunas da tabela. Visual Studio 2005 25 5.5 Seleccione, na janela Data Sources, a opção ComboBox da caixa de listagem associada à coluna Província da tabela ClientesED. Deste modo, ao arrastar a tabela ClientesED para o formulário irá ser criado um controlo ComboBox ligado à coluna Província da tabela ClientesED e irão ser criados objectos Label e TextBox ligados a cada uma das restantes colunas da tabela. 5.6 Arraste a tabela ClientesED da janela Data Sources para o formulário do projecto. Visual Studio 2005 26 Como resultado do passo anterior, além dos objectos Label e TextBox, criados para cada coluna da tabela, foram também criados os objectos EditoraDataSet, clientesEDTableAdapter, clientesEDsBindingSource, clientesEDBindingNavigator e ComboBox. Adicionalmente, o Visual Studio liga as caixas de texto e a caixa de combinação às respectivas colunas da tabela. Adicionalmente, o Visual Studio gera também código, que iremos analisar mais à frente. 5.7 Elimine a barra de navegação criada pelo wizard. 5.8 Elimine a legenda IDCliente (IDClienteLabel) e a caixa de texto correspondente (IDClienteTextBox) criadas pelo assistente, pois o atributo IDCliente é uma coluna IDENTITY e, consequentemente, o utilizador não deve aceder aos seus valores. De seguida, vamos ligar o controlo Combobox à tabela Províncias, de modo a que seja possível, ao utilizador, atribuir a província para um cliente, a partir das províncias existentes na tabela Províncias. 5.9 Aceda ao menu smart tag do controlo ProvínciaComboBox. Active a caixa de verificação Use data bound items. Como resultado, vão ser mostradas as propriedades de ligação. Visual Studio 2005 27 5.10 Para especificar o valor da propriedade Data Source, seleccione a tabela Províncias, de acordo com a figura seguinte. 5.11 Para especificar o valor da propriedade Display Member, seleccione o campo Província do controlo ProvínciasBindingSource, de acordo com a figura seguinte. 5.12 Para especificar o valor da propriedade Value Member, seleccione o campo Código do controlo ProvínciasBindingSource, de acordo com a figura seguinte. Visual Studio 2005 28 5.13 Para especificar o valor da propriedade Selected Value, seleccione o campo Província do controlo ClientesEDBindingSource, de acordo com a figura seguinte. 5.14 De modo resumido, os valores para as propriedades Data Source, Display Member, Value Member e Selected Value, devem estar de acordo com a imagem seguinte. Visual Studio 2005 29 5.15 Seleccione a opção DropDownList para a propriedade DropDownStyle do controlo ProvínciaComboBox, de modo a impedir que o utilizador introduza dados nesta caixa de combinação. 5.16 Altere, na secção DataBindings do controlo ProvínciaComboBox, o valor da propriedade Text para none, de modo a que o valor armazenado nesta propriedade seja ligado ao data source. 5.17 Adicione dois botões ao formulário. Defina as suas propriedades Name, com os valores btnAceitar e btnCancelar e Text, com os valores Aceitar e Cancelar, de acordo com a figura seguinte. 5.18 Defina a propriedade AcceptButton do formulário com o valor btnAceitar. 5.19 Defina a propriedade EndereçoTextBox, Tag dos LocalidadeTextBox, controlos NomeTextBox, ProvínciaComboBox e CódigoPostalTextBox com os valores Nome, Endereço, Localidade, Província e Código Postal, respectivamente. Visual Studio 2005 30 Formulário frmItensFactura Este formulário permite visualizar os itens de uma factura seleccionada na grelha do formulário frmFacturasClientes. 6 Desenho do formulário frmItensFactura. 6.1 Adicione um novo formulário ao projecto. Para tal, seleccione a opção Add Windows Form do menu Project. Como resultado, aparece a caixa de diálogo Add New Item. 6.2 Na secção Templates da caixa de diálogo Add New Item, seleccione a opção Windows Form. Depois introduza o nome para o formulário e pressione o botão Add. Introduza o nome frmItensFactura. 6.3 Defina as propriedades Text, StartPosition e AutoScaleMode, com os valores Ver Itens Factura, WindowsDefaultLocation e Font. Vamos agora editar o comando SQL gerado, de modo predefinido, pelo assistente para o Table Adapter ItensFacturasED, de modo a que incluía uma operação de junção interna entre as tabelas Produtos e ItensFacturasED. 6.4 Seleccione, no DataSet Designer, a consulta Fill do Table Adapter ItensFacturasED. 6.5 Na janela de propriedades, toque na elipse à direita da propriedade CommandText. Visual Studio 2005 31 Como resultado, é mostrada a caixa de diálogo Query Builder, apresentada a seguir. 6.6 Toque com o lado direito do rato no painel superior do construtor de consultas e seleccione o comando Add Table. Visual Studio 2005 32 6.7 Como resultado, é mostrada a caixa de diálogo Add Table. Seleccione a tabela Produtos e pressione o botão Add. Depois, pressione o botão Close. 6.8 Ainda no painel superior do construtor de consultas, construa a consulta de acordo com a imagem seguinte. Visual Studio 2005 33 6.9 Depois de testar a execução da consulta, através do botão Execute Query, pressione o botão OK. Como resultado, vai surgir uma caixa de diálogo a questionar se deseja regenerar os comandos de UPDATE como base no novo comando SELECT. Por outras palavras, se pretende modificar as instruções INSERT, UPDATE e DELETE, de modo a que estejam de acordo com o novo comando SELECT. Visual Studio 2005 34 6.10 Pressione o botão Não, dado que o Visual Studio não pode gerar instruções de INSERT, UPDATE e DELETE que contenham campos de mais do que uma tabela. Assim, as instruções de INSERT, UPDATE e DELETE vão permanecer inalteradas, de modo a incluírem os atributos da tabela principal. 6.11 Arraste o atributo Factura da tabela ItensFacturasED da janela Data Sources para o formulário do projecto. Como resultado do passo anterior, além dos objectos Label e TextBox, criados para a coluna Factura, EditoraDataSet, ItensFacturasEDBindingSource são também criados os objectos ItensFacturasEDTableAdapter, e ItensFacturasEDBindingNavigator. Adicionalmente, o Visual Studio gera também código, que iremos analisar mais à frente. 6.12 Arraste a tabela ItensFacturasED da janela Data Sources para o formulário do projecto. 6.13 Aceda ao menu smart tag da grelha e seleccione o comando Edit Columns. Como resultado, surge a caixa de diálogo Edit Columns. Visual Studio 2005 35 6.14 Na secção Selected Columns, seleccione a coluna Factura e pressione o botão Remove, de modo a remover esta coluna da grelha. 6.15 Seleccione a coluna Designação e toque no botão para a colocar em segundo lugar da lista, a seguir à coluna Produto. 6.16 Elimine a barra de navegação criada pelo wizard. Neste momento, o formulário deve apresentar o seguinte aspecto. Visual Studio 2005 36 6.17 De modo a tornar a grelha apenas disponível para visualização de dados, aceda ao menu smart tag do comando ItensFacturasEDDataGridView e desactive as caixas de verificação Enable Adding, Enable Editing e Enable Deleting. Desactive ainda a caixa de verificação Enable Column Reordering. Vamos ainda adicionar mais uma consulta ao Table Adapter ItensFacturasEDTableAdapter para obter os itens de uma factura. Esta consulta utiliza o identificador da factura seleccionada na grelha do formulário frmFacturasClientes. 6.18 Seleccione, no DataSet Designer, o Table Adapter ItensFacturasEDTableAdapter com o botão direito do rato. Depois, seleccione o comando Add Query. Visual Studio 2005 37 Utilize o Table Adapter Query Configuration Wizard para criar a consulta. 6.19 No primeiro passo do wizard, seleccione a opção Use SQL statements. 6.20 Pressione o botão Next. 6.21 No segundo passo do wizard, seleccione a opção SELECT which returns rows. Visual Studio 2005 38 6.22 Pressione o botão Next. 6.23 No terceiro passo do wizard, pressione o botão Query Builder para construir a consulta graficamente, de acordo com a figura seguinte. Esta consulta vai ser utilizada para obter os itens das facturas que vão ser mostrados neste formulário. Note que, além da operação de junção interna, é também utilizado um parâmetro. Visual Studio 2005 39 6.24 Na caixa de diálogo Query Builder, pressione o botão OK. 6.25 No terceiro passo do wizard, pressione o botão Next. 6.26 No quarto passo do wizard, mantenha activada a caixa de verificação Fill a DataTable, atribua o valor FillByFactura na caixa de texto Method name e desactive a caixa de combinação Return a DataTable, de acordo com a figura seguinte. Visual Studio 2005 40 Pressione o botão Finish. Visual Studio 2005 41 Formulário frmAdicionarFactura Este formulário permite adicionar uma factura, com um ou mais itens, para o cliente seleccionado no formulário frmFacturasClientes. 7 Desenho do formulário frmAdicionarFactura. 7.1 Adicione um novo formulário ao projecto. Para tal, seleccione a opção Add Windows Form do menu Project. Como resultado, aparece a caixa de diálogo Add New Item. 7.2 Na secção Templates da caixa de diálogo Add New Item, seleccione a opção Windows Form. Depois introduza o nome para o formulário e pressione o botão Add. Introduza o nome frmAdicionarFactura. 7.3 Defina as propriedades Text, StartPosition e AutoScaleMode, com os valores Adicionar Factura, CenterScreen e Font. 7.4 Na janela Data Sources, expanda a caixa de verificação correspondente à tabela ClientesED. Depois, arraste os atributos IDCliente e Nome para o formulário frmAdicionarFactura. Como resultado do passo anterior, além dos objectos Label e TextBox, criados para cada coluna, são também criados os objectos EditoraDataSet, ClientesEDTableAdapter, ClientesEDBindingSource e ClientesEDBindingNavigator. Adicionalmente, o Visual Studio gera também código, que iremos analisar mais à frente. 7.5 Para as caixas de texto recentemente criadas, defina as suas propriedades BackColor, ReadOnly e TabStop com os valores Control, True e False, respectivamente. 7.6 Elimine a barra de navegação criada pelo wizard. Visual Studio 2005 42 7.7 Na janela Data Sources, expanda a caixa de verificação correspondente à tabela FacturasED. Depois, arraste o atributo DataFactura para o formulário frmAdicionarFactura. Deste modo, irá ser criado um controlo DateTimePicker ligado à coluna DataFactura da tabela FacturasED e irão ser gerados os objectos FacturasEDTableAdapter e FacturasEDBindingSource. 7.8 Defina a propriedade Format do controlo DateTimePicker, recentemente criado, com o valor Short. 7.9 Seleccione, na janela Data Sources, a opção Details da caixa de listagem associada à tabela Produtos. Visual Studio 2005 43 7.10 Seleccione, na janela Data Sources, a opção ComboBox da caixa de listagem associada à coluna Código da tabela Produtos. 7.11 Arraste o atributo Código da tabela Produtos da janela Data Sources para o formulário frmAdicionarFactura. Como resultado, são criados os controlos Label, ComboBox, ProdutosTableAdapter e ProdutosBindingSource. 7.12 Aceda ao menu smart tag do controlo CódigoComboBox. Active a caixa de verificação Use data bound items. Como resultado, vão ser mostradas as propriedades de ligação. Visual Studio 2005 44 7.13 Atribuía os valores para as propriedades Data Source, Display Member, Value Member e Selected Value, de acordo com a imagem seguinte. 7.14 Seleccione a opção DropDownList para a propriedade DropDownStyle do controlo CódigoComboBox, de modo a impedir que o utilizador introduza dados nesta caixa de combinação. 7.15 Altere, na secção DataBindings do controlo CódigoComboBox, o valor da propriedade Text para none. 7.16 Defina as propriedades Name e Text do controlo CódigoLabel recentemente criado pelo assistente, com os valores ProdutoLabel e Produto:, respectivamente. 7.17 Adicione um controlo Label e defina as suas propriedades Name e Text com os valores e QuantidadeLabel e Quantidade, respectivamente. 7.18 Adicione um controlo TextBox e defina as suas propriedades Name, Tag e Text com os valores QuantidadeTextBox, Quantidade e 1, respectivamente. 7.19 Adicione um botão ao formulário. Defina as suas propriedades Name e Text com os valores btnAdicionarItem e Adicionar Item, respectivamente. 7.20 Arraste a tabela ItensFacturasED da janela Data Sources para o formulário do projecto. Visual Studio 2005 45 7.21 Aceda ao menu smart tag da grelha e seleccione o comando Edit Columns. Como resultado, surge a caixa de diálogo Edit Columns. 7.22 Na secção Selected Columns, seleccione a coluna Factura e pressione o botão Remove, de modo a remover esta coluna da grelha. 7.23 Seleccione a coluna Designação e toque no botão para a colocar em segundo lugar da lista, a seguir à coluna Produto. Visual Studio 2005 46 Neste momento, o formulário deve apresentar o seguinte aspecto. 7.24 De modo a tornar a grelha apenas disponível para visualização de dados, aceda ao menu smart tag do comando ItensFacturasEDDataGridView e desactive as caixas de verificação Enable Adding, Enable Editing e Enable Deleting. Desactive ainda a caixa de verificação Enable Column Reordering. Visual Studio 2005 47 Vamos agora adicionar uma coluna não ligada (Unbound Column) ao comando ItensFacturasEDDataGridView, de modo a incluir um botão que permita apagar um item de uma factura, isto é, um registo da grelha. 7.25 Aceda novamente ao menu smart tag do comando ItensFacturasEDDataGridView e seleccione o comando Edit Columns. Como resultado, surge a caixa de diálogo Edit Items. 7.26 Na caixa de diálogo Edit Items, pressione o botão Add. Como resultado, surge a caixa de diálogo Add Column. 7.27 Na caixa de diálogo Add Column, seleccione a opção Unbound column e defina os restantes itens (Name, Type, Header text, Visible, Read Only e Frozen) de acordo com a figura acima ilustrada. Depois, pressione o botão Add. 7.28 Para voltar à caixa de diálogo Edit Items, pressione o botão Close da caixa de diálogo Add Column, de modo a ser apresentado na coluna mais à direita da grelha. Visual Studio 2005 48 7.29 Utilize o botão para colocar o botão recentemente adicionado no último lugar da lista Selected Columns. 7.30 Ainda na caixa de diálogo Edit Items, seleccione o botão recentemente adicionado e defina as suas propriedades Text e UseColumnTextForButtonValue com os valores Eliminar e True, respectivamente. 7.31 Pressione o botão OK da caixa de diálogo Edit Items. Neste momento, a grelha deve apresentar o seguinte aspecto. Quando o utilizador toca numa qualquer célula de um controlo DataGriedView é activado o evento CellContentClick. Pode programar um procedimento para este evento que determina se o utilizador tocou numa coluna com um botão e, em caso afirmativo, realizar o processamento necessário. Pode ainda utilizar o segundo argumento que é passado para este procedimento de evento para obter o índice do registo e da coluna que foi tocada. 7.32 Seleccione, na janela Data Sources, a opção Details da caixa de listagem associada à tabela OpçõesEncomenda. Visual Studio 2005 49 7.33 Arraste a tabela OpçõesEncomenda para o formulário. Como resultado, vão ser criados objectos Label e TextBox ligados a cada uma das colunas da tabela. São também criados os objectos OpçõesEncomendaTableAdapter e OpçõesEncomendasBindingSource. 7.34 Para todas as caixas de texto recentemente criadas, defina as propriedades BackColor, ReadOnly e TabStop com os valores Control, True e False, respectivamente. 7.35 Na janela Data Sources, expanda a caixa de verificação correspondente à tabela FacturasED. Depois, arraste, um a um, os atributos TotalProduto, Imposto, Transporte e TotalFactura para o formulário frmAdicionarFactura. Como resultado, vão ser criados objectos Label e TextBox ligados a cada uma das colunas da tabela. 7.36 Para as caixas de texto recentemente criadas, defina as suas propriedades BackColor, ReadOnly e TabStop com os valores Control, True e False, respectivamente. Visual Studio 2005 50 7.37 Adicione dois botões ao formulário. Defina as suas propriedades Name, com os valores btnGuardarFactura e btnCancelar e Text, com os valores Guardar Factura e cancelar, de acordo com a figura seguinte. Vamos ainda adicionar mais duas consultas ao Table Adapter FacturasEDTableAdapter para obter as facturas de um dados cliente e o último identificador atribuído à tabela FacturasED. 7.38 Seleccione, no DataSet Designer, o Table Adapter FacturasEDTableAdapter com o botão direito do rato. Depois, seleccione o comando Add Query. Utilize o Table Adapter Query Configuration Wizard para criar a consulta. Visual Studio 2005 51 7.39 No primeiro passo do wizard, seleccione a opção Use SQL statements. 7.40 Pressione o botão Next. 7.41 No segundo passo do wizard, seleccione a opção SELECT which returns rows. 7.42 Pressione o botão Next. Visual Studio 2005 52 7.43 No terceiro passo do wizard, construa a consulta, de acordo com a figura seguinte. Esta consulta vai ser utilizada para obter as facturas do cliente cujo identificador é fornecido através de um parâmetro. 7.44 Pressione o botão Next. Visual Studio 2005 53 7.45 No quarto passo do wizard, mantenha activada a caixa de verificação Fill a DataTable, atribua o valor FillByCliente na caixa de texto Method name e desactive a caixa de combinação Return a DataTable, de acordo com a figura seguinte. 7.46 Pressione o botão Next. 7.47 Pressione o botão Finish. 7.48 Para adicionar outra consulta ao Table Adapter FacturasEDTableAdapter, repita os passos 7.38 a 7.40. 7.49 No segundo passo do wizard, seleccione a opção SELECT which returns a single value. Visual Studio 2005 54 7.50 Pressione o botão Next. 7.51 No terceiro passo do wizard, introduza o código SQL necessário para que fique de acordo com a figura abaixo ilustrada. Esta consulta vai ser utilizada para obter o valor do último identificador de factura (IDFactura) atribuído pelo SQL SERVER. Para tal, é utilizada a função IDENT_CURRENT(‘Nome_Tabela’). Esta função devolve o último valor gerado para a coluna IDENTITY da tabela especificada no seu argumento. Visual Studio 2005 55 7.52 Pressione o botão Next. 7.53 No quarto passo do wizard atribua o valor ObterÚltimoValorIDENTITY ao nome do método que está a criar. Visual Studio 2005 56 7.54 Pressione o botão Next. 7.55 Pressione o botão Finish. Neste momento, devem estar associados ao formulário frmAdicionarFactura os seguintes controlos. Visual Studio 2005 57 Neste momento, o DataSet Designer deve apresentar o seguinte aspecto. Para finalizar, note que pode aplicar os tópicos abordados nas tarefas orientadas 2 a 7 para melhorar a interface das suas aplicações de bases de dados. Visual Studio 2005 58