sexta-feira, 3 de junho de 2011

Select em objeto DataTable

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>&nbsp;<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!

Nenhum comentário:

Postar um comentário

Deixe aqui seu comentário