Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
705
Assunto : VB.NET
Titulo: Fazendo um autosize de colunas na dataGrid

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Um problema comum ao trabalharmos com dataGrids é ter certeza de que as informações irão caber cada qual em sua coluna.

Para resolver isso podemos fazer um autosize na coluna, mas como ?

Precisaremos pegar o tamanho máximo do conteúdo da coluna, fazendo uma varredura em toda a coluna da grid. É importante observar que precisaremos de uma forma de medir o texto, que é o conteúdo da grid, em medidas gráficas que possam ser utilizadas como largura da coluna. Para isso vamos utilizar o método MeasureString da classe Graphics.

Veja como fica :

Dim width As Single
width = 0
Dim numRows As Integer
numRows = CType(dataGrid1.DataSource, DataTable).Rows.Count
Dim g As Graphics
g = Graphics.FromHwnd(dataGrid1.Handle)
Dim sf As StringFormat
sf = New StringFormat(StringFormat.GenericTypographic)
Dim size As SizeF
Dim i As Integer
i = 0

Do While (i < numRows)
size = g.MeasureString(dataGrid1(i, 1).ToString, dataGrid1.Font, 500, sf)
If (size.Width > width) Then
width = size.Width
End If
i = (i + 1)

Loop
g.Dispose()
dataGrid1.TableStyles("customers").GridColumnStyles(1).Width = CType(width, Integer)

Neste exemplo está sendo feito o autosize da coluna 1. O laço analisa a maior largura para determinar o que deve ser atribudo na coluna e a atribuição é feita através da propriedade TableStyles.

Este trecho de código pode se transformar em uma sub parametrizada (trocando o número da coluna - 1 - por uma variável) e ser chamado do load, por exemplo :

autosizeColuna(1)

Podemos também fazer um pequeno laço para fazer o autoSize em todas as colunas da grid, veja :

Dim i As Integer
Dim numCols As Integer

numCols = CType(dataGrid1.DataSource, DataTable).Columns.Count
Do While (i <= numCols)
AutoSizeColuna(i)
i = (i + 1)
Loop

Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 11/30/2005 12:56:00 PM
nome: Xato
email: Xatp@putaquepariu.com
comentário:
Oh sua anta, ele é o dono da bufalo...

data: 11/24/2005 11:13:00 AM
nome: Plinio
email: pblli@yahoo.com.br
comentário:
Desculpe-me Dennes, não sabia que você fazia parte da equipe do bufaloinfo.

data: 11/24/2005 11:10:00 AM
nome: Plinio
email: pblli@yahoo.com.br
comentário:
Gostei da dica, porém, se a quantidade de linhas no datagrid for muito grande, teremos problema de performance, principalmente se fazermos o autosize em todas as colunas.

Aproveitando, vejam este link:
http://thespoke.net/blogs/dennes/archive/2005/01/15/122118.aspx

Não acho correto, simplesmente, copiarem e colarem a dica e não indicarem a fonte, como talvez, este dennes tenha feito.


 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br