Limitando o conteúdo de uma coluna no DataGrid


A solução apresentada neste artigo é criar uma coluna customizada para que não se precise alterar a query SQL e também evitar de tratar isso em todo o evento ItemDataBound. A idéia é criar uma coluna que herde diretamente da classe BoundColumn que tem as funcionalidades básicas de uma coluna do DataGrid.

Nesta classe customizada que será criada, uma propriedade chamada QuantidadeCaracteres é criada para receber um número inteiro que será a quantidade de caracteres que a coluna deverá ter. Pelo fato de herdarmos da classe BoundColumn temos acesso e devemos sobrescrever o método FormatDataValue que, é este que recupera o dado da fonte de dados e devolve para o runtime do ASP.NET exibir em seu devido lugar dentro do DataGrid. E para finalizar, a criação de um método adicional chamada Truncar fará o trabalho para “cortar” a string que representa o valor da fonte de dados. Dado esta explicação, veremos abaixo como fica a implementação desta nova classe:

using System;
using System.Web.UI.WebControls;

namespace IAWebControls
{
    public class LimitedColumn : BoundColumn
    {
        private int _quantidadeCaracteres;

        public int QuantidadeCaracteres
        {
            get
            {
                return this._quantidadeCaracteres;
            }
            set
            {
                this._quantidadeCaracteres = value;
            }
        }

        protected override string FormatDataValue(object dataValue)
        {
            return this.Trunca(dataValue.ToString());
        }

        private string Trunca(string originalValue)
        {
            if(originalValue.Length <= this._quantidadeCaracteres)
                return originalValue;
            else
                return string.Format("{0}...", originalValue.Substring(0, this._quantidadeCaracteres));
        }
    }
}

Depois da classe feita, resta utilizá-la no HTML, dentro do DataGrid que iremos colocar na página. Mas vale lembrar que é necessário registrar a classe para que ela funcione corretamente, através da diretiva Register. Finalmente criamos uma coluna dentro do DataGrid que será está coluna que apresentará os dados limitados ao número de caracteres que iremos definir através da propriedade QuantidadeCaracteres. O código abaixo ilustra como isso é configurado.

<%@ Register TagPrefix="IAControls" Namespace="IAWebControls" Assembly="IAWebControls" %>

...

<asp:DataGrid 
    id="DataGrid1" 
    runat="server" 
    AutoGenerateColumns="False">
    <Columns>
        <asp:BoundColumn 
            DataField="CategoryID" 
            HeaderText="CategoryID" />
        <IAControls:LimitedColumn 
            DataField="Description" 
            QuantidadeCaracteres="10" />
    </Columns>
</asp:DataGrid>

 

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s