ASP.NET Passo a Passo Vinculação de Dados Conteúdo do Capítulo 1. 2. 3. Representar coleções usando controles vinculados Acessar bancos de dados Personalizar controles vinculados ASP.NET Passo a Passo Vinculação de Dados Vinculação de dados com uma coleção 1. 2. 3. Crie uma aplicação Web (Empty Web Application) de nome DataBindORama. Utilizando a opção Add New Item adicione ao projeto uma classe de nome TechnologyDescriptor. Adicione a esta classe duas propriedades string denominadas TechnologyName e Description que representam respectivamente o nome e a descrição de uma tecnologia. ASP.NET Passo a Passo Vinculação de Dados Classe TechnologyDescriptor public class TechnologyDescriptor { public String TechnologyName {get; set; } public String Description {get; set; } public TechnologyDescriptor(String strTechnologyName, String strDescription) { this.TechnologyName = strTechnologyName; this.Description = strDescription; } public static List<TechnologyDescriptor> CreateTechnologyList() { List<TechnologyDescriptor> lTechnologies = new List<TechnologyDescriptor>(); TechnologyDescriptor technologyDescriptor; ASP.NET Passo a Passo Vinculação de Dados Classe TechnologyDescriptor technologyDescriptor = new TechnologyDescriptor("ASP.NET", "Handle HTTP Requests"); lTechnologies.Add(technologyDescriptor); technologyDescriptor = new TechnologyDescriptor("Windows Forms", "Local Client UI technology"); lTechnologies.Add(technologyDescriptor); technologyDescriptor = new TechnologyDescriptor("ADO.NET", "Talk to the database"); lTechnologies.Add(technologyDescriptor); technologyDescriptor = new TechnologyDescriptor(".NET CLR", "Modern runtime environment for manage code"); lTechnologies.Add(technologyDescriptor); ASP.NET Passo a Passo Vinculação de Dados Classe TechnologyDescriptor technologyDescriptor = new TechnologyDescriptor(".NET IL", "Intermediary representation for .NET applications"); lTechnologies.Add(technologyDescriptor); technologyDescriptor = new TechnologyDescriptor(".NET Compact Framework", "Modern runtime environment for small devices"); lTechnologies.Add(technologyDescriptor); return lTechnologies; } ASP.NET Passo a Passo Vinculação de Dados Vinculação de dados com uma coleção 1. 2. 3. 4. Adicione a aplicação web um formulário de nome Default.aspx. Adicione quatro controle à página criada: um ListBox, um DropDownList, um RadioButtonList e um CheckButtonList. Abaixo de cada um dos controles adiciona um rótulo (Label) renomenando-os para: LabelListBoxSelectedValue, LabelDropDownListSelectedValue, LabelRadioButtonListSelectedValue e LabelCheckBoxListSelectedValue. Defina a propriedade AutoPostBack dos controle de lista para true com objetivo de executar um PostBack sempre que um opção do controle for selecionada. ASP.NET Passo a Passo Vinculação de Dados Pagina com Componentes de Lista ASP.NET Passo a Passo Vinculação de Dados Programe o evento Page_Load da página para criar a lista de tecnologias e adicioná-la aos componentes. 1. Instancie a lista de tecnologias 2. Associe a propriedade DataSource para apontar a fonte de dados do componentes para a lista. 3. Defina a propriedade DataTextField para estabelecer que campo da lista será utilizado para apresentação dos dados nos componentes. 4. Defina a propriedade DataValueField para estabelecer que campo da lista será utilizado como valor (ou chave) dos dados. 5. A programação deve ser executada apenas na primeira carga da página, não sendo executada no PostBack. ASP.NET Passo a Passo Vinculação de Dados protected void Page_Load(object sender, EventArgs e) { IList techList = TechnologyDescriptor.CreateTechnologyList(); if (!this.IsPostBack) { this.ListBox1.DataSource = techList; this.ListBox1.DataTextField = "TechnologyName"; this.ListBox1.DataValueField = "Description"; this.DropDownList1.DataSource = techList; this.DropDownList1.DataTextField = "TechnologyName"; this.DropDownList1.DataValueField = "Description"; this.RadioButtonList1.DataSource = techList; this.RadioButtonList1.DataTextField = "TechnologyName"; this.RadioButtonList1.DataValueField = "Description"; this.CheckBoxList1.DataSource = techList; this.CheckBoxList1.DataTextField = "TechnologyName"; this.CheckBoxList1.DataValueField = "Description"; this.DataBind(); } ASP.NET Passo a Passo Vinculação de Dados Programe os manipuladores de evento de seleção dos controles SelectedIndexChanged da página apresentar a opção selecionada nos rótulos adicionados abaixo de cada componentes de lista. protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { this.LabelListBoxSelectedValue.Text = this.ListBox1.SelectedValue; } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { this.LabelDropDownListSelectedValue.Text = this.DropDownList1.SelectedValue; } protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e) { this.LabelRadioButtonListSelectedValue.Text = this.RadioButtonList1.SelectedValue; } protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e) { this.LabelCheckBoxListSelectedValue.Text = this.CheckBoxList1.SelectedValue; } ASP.NET Passo a Passo Vinculação de Dados Pagina com Componentes de Lista ASP.NET Passo a Passo Vinculação de Dados Criando uma conexão com um banco de dados 1. Adicione à aplicação um folder App_Data. 2. Copie para a pasta o banco de dados exemplo ASPDotNetStepByStep.mdb 3. Adicione um formulário com nome WebFormConexao.aspx para configurarmos uma conexão com o banco de dados. 4. Adicione ao formulário um componente SQLDataSource. 5. Selecione a opção “Configure Data Source” no menu do componente. Essa opção irá executar um wizard de configuração de conexão. 6. Selecione o botão “new connection” no wizard. A tela de configuração de conexão aparecerá. 7. Selecione o botão “Change” e escolha o DataSource do tipo “Microsoft Access Database File” ASP.NET Passo a Passo Vinculação de Dados Criando uma conexão com um banco de dados 8. Selecione o botão “Browse” e escolha o arquivo ASPDotNetStepByStep.mdb que se encontra na pasta App_Data. 9. Clique em Test Connection para verificar se a configuração permite a conexão com o banco de dados. 10. Confirme para criar a String de Conexão que deverá ser similar a apresentada abaixo: Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\ASPDotNetStepByStep.mdb 11. 12. Clique no botão Next para continuar o wizard e entrar na tela que permite salvar a conexão no arquivo de configurações web.config. Confirme que deseja salvar a conexão e utilize o seguinte nome: AspDotNetStepByStep. ASP.NET Passo a Passo Vinculação de Dados Criando uma conexão com um banco de dados 13. Clique no botão Next para continuar o wizard e entrar na tela que permite definir o comando de acesso a dados do DataSource. 14. O wizard propõe criar o acesso a primeira tabela que ele identifica no banco de dados que, no caso, é a tabela DotNetReferences. 15. Clique no botão Next para continuar o wizard e entrar na tela que testa do acesso a dados do DataSource. 16. Clique no botão Test Query e em seguida no botão Finish para concluir. ASP.NET Passo a Passo Vinculação de Dados Após o procedimento executado utilizando o wizard foi adicionado ao arquivo web.config a string de conexão com o banco de dados conforme apresentado abaixo. <configuration> <connectionStrings> <add name="AspDotNetStepByStep“ connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\ASPDotNetStepByStep.mdb" providerName="System.Data.OleDb" /> </connectionStrings> ... </configuration> ASP.NET Passo a Passo Vinculação de Dados Executando um comando SQL e acessando o resultado com o DataReader 1. 2. 3. 4. 5. Vamos introduzir uma página para execução de um comando para consultar no banco de dados o título de um livro a partir do nome de um autor. Adicione um formulário de nome WebFormDataReader com um componente rótulo, uma caixa de texto, um botão e uma caixa de texto. Altere a propriedade Text do primeiro rótulo para “Autor:”. Altere a propriedade Text do botão para “Consultar”. Altere a propriedade TextMode da segunda caixa de texto para MultiLine. Inclua um manipulador para o evento Click do botão e adicione o código a seguir. O código apresentado utiliza a conexão criada para executar um comando de consulta de livros de um determinado autor utilizando a classe DataReader e apresenta o resultado obtido no segundo rótulo. Execute a aplicação e consulte o livro do autor Petzold. ASP.NET Passo a Passo Vinculação de Dados Aplicação de consulta de livros de um autor utilizando o DataReader ASP.NET Passo a Passo Vinculação de Dados Manipulador do evento click do botão // Cria Gerenciador de Conexões DbProviderFactory dbFac = DbProviderFactories.GetFactory("System.Data.OleDb"); // Cria Conexão com banco de dados DbConnection conn = dbFac.CreateConnection(); // Acessa a configuração da conexão string s = ConfigurationManager.ConnectionStrings["AspDotNetStepByStep"]. ConnectionString; // atribui a configuração do arquivo ao objeto de conexão conn.ConnectionString = s; // Abre conexão com o banco de dados conn.Open(); // Cria comando SQL DbCommand com = conn.CreateCommand(); // define SQL do comando com.CommandText = "Select * from DotNetReferences where AuthorLastName = '" + TextBox1.Text + "'"; ASP.NET Passo a Passo Vinculação de Dados Manipulador do evento click do botão // Executa comando, gerando objeto DbDataReader DbDataReader dr = com.ExecuteReader(); // Le titulo do livro do resultado e apresenta no segundo rótulo if (dr.HasRows) { // Lima o textbox2 TextBox2.Text = ""; while (dr.Read()) // Le o proximo registro // Adiciona o livro encontrato ao TextoBox TextBox2.Text = TextBox2.Text + dr["Title"].ToString(); } else TextBox2.Text = "Nenhum livro encontrado para o autor"; } } ASP.NET Passo a Passo Vinculação de Dados Tela de Consulta utilizando o DataReader ASP.NET Passo a Passo Vinculação de Dados Executando um comando SQL e acessando o resultado com o Dataset 1. Adicione um formulário de nome WebFormDataSet com um componente de rótulo, uma caixa de texto, um botão e uma caixa de texto. 2. Altere as propriedades dos componentes para criar uma interface similar ao formulário WebFormDataReader. 3. Inclua um manipulador para o evento Click do botão e adicione o código a seguir. O código apresentado utiliza a conexão criada para executar um comando de consulta de livros de um determinado autor utilizando a classe Dataset e apresenta o resultado obtido no segundo rótulo. 4. Execute a aplicação e consulte o livro do autor Petzold. ASP.NET Passo a Passo Vinculação de Dados Manipulador do evento click do botão // Cria Gerenciador de Conexões DbProviderFactory dbFac = DbProviderFactories.GetFactory("System.Data.OleDb"); // Cria Conexão com banco de dados DbConnection conn = dbFac.CreateConnection(); // Acessa a configuração da conexão string s = ConfigurationManager.ConnectionStrings ["AspDotNetStepByStep"].ConnectionString; // atribui configuração do arquivo ao objeto de conexão com o banco de dados conn.ConnectionString = s; // Abre conexão com o banco de dados conn.Open(); // Cria comando SQL DbCommand com = conn.CreateCommand(); // define SQL do comando com.CommandText = "Select * from DotNetReferences where AuthorLastName = '" + TextBox1.Text + "'"; ASP.NET Passo a Passo Vinculação de Dados Manipulador do evento click do botão // Cria objeto DbDataAdapter para execução do comando e geração de dados para o Dataset DbDataAdapter da = dbFac.CreateDataAdapter(); // Define comando do DataAdapter da.SelectCommand = com; // Cria o objeto Dataset para armazernar o resultada da consulta SQL a ser executada DataSet ds = new DataSet(); // Executa o comando SQL e tranfere o resultado para o DataSet da.Fill(ds); // Le a tabela resultado DataTable dt = ds.Tables[0]; ASP.NET Passo a Passo Vinculação de Dados Manipulador do evento click do botão // Le registros de titulo do livro da tabela e apresenta no segundo textbox TextBox2.Text = ""; if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { // Adiciona o livro encontrato ao TextoBox TextBox2.Text = TextBox2.Text + dt.Rows[i]["Title"].ToString(); } } else TextBox2.Text = "Nenhum livro encontrado para o autor"; ASP.NET Passo a Passo Vinculação de Dados Vinculação de dados com Banco de dados 1. Adicione um formulário de nome DataBindingWithDB ao projeto. 2. Adicione ao formulário um componente AccessDataSource e configure-o para acessar o banco de dados ASPDotNetStepByStep.mdb com acesso à tabela DotNetReferences 3. Defina a propriedade DataSourceMode como DataReader. 4. Adicione na página um componente de rótulo e atribua à propriedade Text o conteúdo “Autores e Títulos”. 5. Abaixo do rótulo, adicione um componente ListBox. Defina a propriedade AutoPostBack como true. 6. Para fazer a vinculação de dados acesse no menu do componente a opção “Choose Data Source” e selecione o AccessDataSouce introduzido no item 2. 7. Na opção “select data field to display...” escolha o campo AuthorLastName para ser o campo apresentado no Listbox. ASP.NET Passo a Passo Vinculação de Dados Vinculação de dados com Banco de dados 8. Na opção “select data field to value...” escolha o campo Title para ser o campo que representa o valor do Listbox. 9. A vinculação de dados pode ser feita também via programação pelo código apresentado abaixo. 10. Para que esta programação não entre em conflito com a seleção realizada nos passos 6,7 e 8 a vinculação realizada deve ser apagada. Acesse no menu do componente Listbox a opção “Choose Data Source” e selecione “(none)”. protected void Page_Load(object sender, EventArgs e){ if (!IsPostBack) { ListBox1.DataSource = AccessDataSource1; ListBox1.DataTextField = "AuthorLastName"; ListBox1.DataValueField = "Title"; ListBox1.DataBind(); } } ASP.NET Passo a Passo Vinculação de Dados Vinculação de dados com Banco de dados 11. Inclua na parte inferior do formulário um rótulo para apresentar o valor selecionado no formulário. 12. Inclua um manipulador para o evento SelectedIndexChanged do formulário e acrescente o código apresentado abaixo. 13. A figura apresenta tela da aplicação protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { Label2.Text = ListBox1.SelectedItem.Value; } ASP.NET Passo a Passo Vinculação de Dados Vinculação de dados com Banco de dados 1. Adicione ao formulário um componente RadioButtonList. 2. Defina a propriedade AutoPostBack como true. 3. Selecione no menu do componente a opção “Choose Data Source”. 4. Na opção “select data field to display...” escolha o campo AuthorLastName e na opção “select data field to value...” escolha o campo Title. 5. Inclua um manipulador para o evento SelectedIndexChanged do formulário e acrescente o código que transfere o valor do item selecionado para o rótulo Label2. 6. A aplicação é mostrada a seguir. ASP.NET Passo a Passo Vinculação de Dados Aplicação com componentes com vinculação ao banco de dados ASP.NET Passo a Passo Vinculação de Dados Utilização do controle GridView 1. Adicione um formulário de nome UseGridView ao projeto. 2. Adicione ao formulário um componente GridView. Utilizando a opção “Choose Data Source” configure o componente para acessar no banco de dados ASPDotNetStepByStep a tabela DotNetReferences. 3. Utilizando o menu do componente habilite as opções Paging, Sorting e Selection. 4. O componente apresentará o conteúdo da tabela permitindo que o usuário seleciona a coluna de ordenação, selecione a página de dados a ser apresentara e marque uma linha como selecionada. 5. Altera a apresentação do componente utilizando a opção AutoFormat do menu do componente. ASP.NET Passo a Passo Vinculação de Dados Aplicação com o controle GridView ASP.NET Passo a Passo Vinculação de Dados Utilização do controle FormView 1. Adicione um formulário de nome UseFormView ao projeto. 2. Adicione ao formulário um componente FormView. Utilizando a opção “Choose Data Source” configure o componente para acessar no banco de dados ASPDotNetStepByStep a tabela DotNetReferences. 3. Utilizando o menu do componente habilite a opção Enable Paging. 4. Atribua o título “Cadastro de Livros” ao componente utilizando a propriedade HeaderText. 5. Altera a apresentação do componente utilizando a opção AutoFormat do menu do componente. ASP.NET Passo a Passo Vinculação de Dados Aplicação com o controle FormView ASP.NET Passo a Passo Vinculação de Dados Utilização do controle DetailsView 1. Adicione um formulário de nome UseDetailsView ao projeto. 2. 3. Adicione ao formulário um componente DetailsView. Utilizando a opção “Choose Data Source” configure o componente para acessar no banco de dados ASPDotNetStepByStep. Na opção tela de configuração da tabela de dados “Configure the Selected Statement”, selecione a opção “Specify a custom SQL Statement or stored procedure”. ASP.NET Passo a Passo Vinculação de Dados Utilização do controle DetailsView 3. Esta opção abre a possibilidade de definirmos comandos para consulta, inserção, alteração e exclusão de dados na tabela. 4. 5. Inclua os comandos a seguir nas abas próprias para cada caso. Após a configuração dos comandos, habilite as opções Enable Inserting, Enable Updating e Enable Deleting no menu do componente DetailsView. Habilite também a opção Enable Paging. ASP.NET Passo a Passo Vinculação de Dados Comandos para consulta, inserção, alteração e exclusão de dados na tabela. SELECT ID, Title, AuthorLastName, AuthorFirstName, Topic, Publisher FROM DotNetReferences UPDATE DotNetReferences set Title = @Title, AuthorLastName = @AuthorLastName, AuthorFirstName = @AuthorFirstName, Topic = @Topic, Publisher = @Publisher WHERE ID = @ID INSERT Into DotNetReferences (ID, Title, AuthorLastName, AuthorFirstName, Topic, Publisher) VALUES (@ID, @Title, @AuthorLastName, @AuthorFirstName, @Topic, @Publisher) DELETE from DotNetReferences WHERE ID = @ID ASP.NET Passo a Passo Vinculação de Dados Aplicação com o controle DetailsView ASP.NET Passo a Passo Vinculação de Dados Aplicação com o controle DetailsView com opção de edição selecionada ASP.NET Passo a Passo Vinculação de Dados Utilização do controle DataList 1. Adicione um formulário de nome UseDataList ao projeto. 2. 3. 4. Adicione ao formulário um componente DataList. Utilizando a opção “Choose Data Source” configure o componente para acessar no banco de dados ASPDotNetStepByStep. Na opção de “Property Builder” configure para mostrar Header e Footer. Defina também para apresentar duas colunas. Defina a propriedade Caption como “Autores e Títulos”. ASP.NET Passo a Passo Vinculação de Dados Aplicação com DataList configurado com 2 colunas ASP.NET Passo a Passo Vinculação de Dados Vinculação de dados com LINQ 1. Adicione um formulário de nome UseLinq ao projeto. 2. Adicione um componente rótulo, uma caixa de texto, um botão e um GridView. 3. Ajuste a propriedade Text do rótulo para “Tecnologia” e a propriedade Text do botão para “Consultar”. 4. Será utilizado o LINQ para consultar as tecnologias com o texto digitado na caixa de texto e o resultado será apresentado no GridView. 5. Crie o manipulador para o evento do botão e inclua o código apresentado a seguir. 6. O código apresentado realiza uma consulta Linq para identificar as tecnologias com o texto informado e vincula o resultado ao GridView. ASP.NET Passo a Passo Vinculação de Dados Vinculação de dados com LINQ protected void Button1_Click(object sender, EventArgs e){ List<TechnologyDescriptor> techList = TechnologyDescriptor.CreateTechnologyList(); GridView1.DataSource = from technologyDescriptor in techList where technologyDescriptor.TechnologyName.Contains(TextBox1.Text) == true orderby technologyDescriptor.TechnologyName.Length select new { technologyDescriptor.Description, technologyDescriptor.TechnologyName }; GridView1.DataBind(); } ASP.NET Passo a Passo Vinculação de Dados Aplicação com vinculação de dados e consulta LINQ ASP.NET Passo a Passo Vinculação de Dados Vinculação de dados com LINQ 1. Caso o usuário deseje apresentar apenas a descrição da tecnologia a codificação do select deve ser feita conforme apresentada abaixo. 2. A figura apresenta o resultado da aplicação alterando o select. protected void Button1_Click(object sender, EventArgs e){ ... select technologyDescriptor.Description; ... }