LA.Net
Reflexões sobre C#, .Net e programação em geral

Para além de visualizarmos os dados, muitas vezes é necessário procedermos à ordenação dos mesmos. Por exemplo, o novo controlo GridView permite a realização de uma operação deste tipo por parte de um utilizador final.O controlo ObjectDataSource permite-nos definir um método que recebe um parâmetro que é utilizado para indicar a ordenação e respectivo sentido (ascendente e descente). A ordenação dos dados implica a adição de um novo método à classe FuncionariosRepository de forma a que o controlo consiga executar este tipo de operações.

using System;

using System.Data;

using System.Data.SqlClient;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Web.Configuration;

 

namespace ObjectDemo

{

    public class FuncionarioRepository

    {

        public FuncionarioCollection LoadFuncionarios( )

        {

            FuncionarioCollection funcionarios = new FuncionarioCollection();

            using ( SqlConnection cnn = new SqlConnection( WebConfigurationManager.ConnectionStrings ["funcDB"].ConnectionString ) )

            {

                SqlCommand cmd = new SqlCommand( "select IdFuncionarios, Nome, Morada, Telefone from funcionarios", cnn );

                cnn.Open( );

 

                SqlDataReader reader = cmd.ExecuteReader( CommandBehavior.CloseConnection );

                while ( reader.Read( ) )

                {

                    funcionarios.Add( new Funcionario( reader.GetInt32( 0 ), reader.GetString( 1 ), reader.GetString( 2 ), reader.GetString( 3 ) ) );

                }

                reader.Close( );

            }

            return funcionarios;

        }      

 

        public FuncionarioCollection LoadFuncionarios( string sortColumn)

        {

            if ( string.IsNullOrEmpty( sortColumn ) ) return LoadFuncionarios( );

            FuncionarioCollection funcionarios = new FuncionarioCollection( );

            using ( SqlConnection cnn = new SqlConnection( WebConfigurationManager.ConnectionStrings ["funcDB"].ConnectionString ) )

            {

                SqlCommand cmd = new SqlCommand( "select IdFuncionarios, Nome, Morada, Telefone from funcionarios order by " + sortColumn, cnn );

                cnn.Open( );

 

                SqlDataReader reader = cmd.ExecuteReader( CommandBehavior.CloseConnection );

                while ( reader.Read( ) )

                {

                    funcionarios.Add( new Funcionario( reader.GetInt32( 0 ), reader.GetString( 1 ), reader.GetString( 2 ), reader.GetString( 3 ) ) );

                }

                reader.Close( );

            }

            return funcionarios;

        }     

    }

}

A implementação do método começa por verificar se o parâmetro sortColumn possui um valor válido. Se tal não acontecer, invocamos o método LoadFuncionarios definido inicialmente. Por outro lado, um valor válido no parâmetro é sinónimo de uma expressão que permite ordenar os dados. No nosso exemplo, os nomes dos campos da tabela Funcionarios são os mesmos das propriedades expostas pela classe Funcionario. Esta situação é ideal uma vez que o controlo GridView utilizado nas nossas experiências está preparado para reagir a um click sobre o cabeçalho de uma coluna através da invocação do método correspondente no controlo data source associado. Ao executar esse método, o controlo GridView passa uma expressão de ordenação construída a partir do nome do campo e do tipo de ordenação pretendida (se as propriedades possuissem nomes diferentes dos campos da tabela teríamos de adaptar o código do método LoadFuncionarios de forma a que este construisse uma instrução de SQL válida para o nosso problema).

A página seguinte utiliza o controlo GridView para executar a ordenação dos dados provenientes do controlo ObjectDataSource:

<%@ Page Language="C#" %>

<html>

<head runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="form1" runat="server">

        <h3>Apresenta uma lista de alunos</h3>

            <asp:GridView ID="grid" runat="server" DataSourceID="source"

                AllowSorting="true">

            </asp:GridView>

            <asp:ObjectDataSource ID="source" runat="server"

                TypeName="ObjectDemo.FuncionarioRepository"

                SelectMethod="LoadFuncionarios"

                SortParameterName="sortColumn"  >               

            </asp:ObjectDataSource>               

    </form>

</body>

</html>

Como é possível verificar, recorremos à propriedade SortParameterName para definir o nome do parâmetro esperado pelo método de select que é utilizado por efectuar a ordenação.Um click sobre o cabeçalho da grid faz com que o nosso método adicionado à classe FuncionariosRepository seja executado. Na próxima entrada vamos adaptar a nossa classe de forma a possibilitar a paginação dos dados provenientes do controlo ObjectDataSource.

posted on Wednesday, June 29, 2005 11:11 PM
Comments
No comments posted yet
Title  
Name  
Url
Box Code
Protected by FormShield
Comments