Saudações, jovens!
Neste texto, veremos como efetuar uma seleção de registros em um objeto DataTable previamente alimentado de forma programática. Para demonstrar, iremos criar o DataTable dinamicamente e sem a presença de uma base de dados. O projeto será criado no Visual Studio 2010 em linguagem VB.NET.
Abra o Visual Studio e crie um novo projeto do tipo Web Site (File > New > Web Site) em linguagem VB.NET.
Vamos aproveitar a página Default.aspx para demonstrar o exemplo. Acesse a Toolbox, na guia Data e arraste o controle GridView para dentro da página. Segue abaixo o fonte HTML da página com a grade devidamente formatada.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
Width="432px">
<Columns>
<asp:BoundField DataField="Nome" HeaderText="Nome" />
<asp:BoundField DataField="Email" HeaderText="E-mail" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
Percebam que acrescentamos duas colunas no GridView (Nome e E-mail), justamente para servir de base para a seleção que iremos fazer no DataTable. Abaixo do GridView, acrescente um controle TextBox e um Button que será usado na pesquisa. O código abaixo já contempla a grade e os dois controles.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
Width="432px">
<Columns>
<asp:BoundField DataField="Nome" HeaderText="Nome" />
<asp:BoundField DataField="Email" HeaderText="E-mail" />
</Columns>
</asp:GridView>
<br />
<asp:TextBox ID="TextBox1" runat="server">
</asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Pesquisar" />
</div>
</form>
</body>
</html>
Neste momento, o layout da página Default.aspx deve ser semelhante a imagem abaixo.
Clique no menu View > Code para termos acesso ao editor de código fonte da página (code-behind). Transcreva o trecho abaixo para a página.
Imports System.Data
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
PreencherDataTable()
GridView1.DataSource = Session("contato")
GridView1.DataBind()
End If
End Sub
Private Sub PreencherDataTable()
Dim _dt As New DataTable
_dt.Columns.Add("Nome", GetType(String))
_dt.Columns.Add("Email", GetType(String))
_dt.Rows.Add("Tecla", "contato.programacao@gmail.com")
_dt.Rows.Add("Lula", "lula.pt@gmail.com")
_dt.Rows.Add("Kassab", "kassab.dem@gmail.com")
Session("contato") = _dt
End Sub
End Class
O código descreve a criação do objeto DataTable, a carga de alguns registros hipotéticos e a atribuição de toda a estrutura do objeto a variável de sessão Session(“contato”). Por fim, criamos o vinculo do GridView com a Session. Resta escrever a parte que dá nome ao artigo, que é o filtro com o método Select do DataTable. Ainda na aba Design, dê um duplo-clique sobre o botão pesquisar e escreva o código abaixo no escopo do evento Click.
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim _dt As New DataTable
If TextBox1.Text.Trim() = "" Then
GridView1.DataSource = Session("contato")
GridView1.DataBind()
Else
Dim _drFiltro() As DataRow = _
DirectCast(Session("contato"), DataTable).Select("Nome LIKE '%" + TextBox1.Text + "%'")
_dt.Columns.Add("Nome", GetType(String))
_dt.Columns.Add("Email", GetType(String))
For Each _dr As DataRow In _drFiltro
_dt.Rows.Add(_dr(0).ToString(), _dr(1).ToString())
Next
GridView1.DataSource = _dt
GridView1.DataBind()
End If
End Sub
O exemplo é simples, e serve para entender o funcionamento do método Select do objeto. A nível de estudo, fizemos um filtro através do campo Nome do DataTable e recarregamos o GridView com o resultado da pesquisa. Para testar, execute a aplicação e veja o resultado.
Fico por aqui e até a próxima!