L'utilizzo del text-overflow in un DataGrid non si può fare applicando semplicemente una CssClass alla colonne: richiede la definizione di una TemplateColumn nella quale si deve inserire un ItemTemplate che contiene un Literal nel quale scriveremo un tag html (nobr o span o div), all'interno del quale metteremo finalmente l'informazione.
Ecco un esempio:
<asp:TemplateColumn SortExpression="soggetto" HeaderText="Soggetto" > <ItemTemplate> <asp:Literal> <nobr style="overflow:hidden; text-overflow:ellipsis; white-space:nowrap; width: 200px" title="<%# DataBinder.Eval(container.DataItem, "soggetto") %>"> <%# DataBinder.Eval(container.DataItem, "soggetto") %> </nobr> </asp:Literal> </ItemTemplate> </asp:TemplateColumn>
Un modo più semplice e flessibile consiste nell'utilizzare una piccola classe ITemplate come segue, che può essere richiamata in qualsiasi Datagrid specificando la larghezza della colonna e il campo dati da usare:
Public Class ItemOverflow
Implements ITemplate
Dim column As String ' nome della colonna dati
Dim larghezza As Integer ' larghezza della colonna del datagrid
' implementa un ItemTemplate per una colonna di testo in un datagrid:
' visualizza solo la parte di testo che corrisponde alla larghezza indicata
' con funzione di ellipsis (... alla fine del testo tagliato),
' e visualizza il testo completo quando il mouse si ferma sopra la cella
' USO :
'1- creare una colonna Template nel datagrid:
' <asp:TemplateColumn SortExpression="soggetto" HeaderText="Soggetto" />
'2- inserire nel Page_init la creazione del contenuto della colonna:
' dim posCol as integer= 5 'se la colonna è la sesta del datagrid
' Dim itov As New ItemOverflow("soggetto", 200)
' Dim tempcol As TemplateColumn = CType(elenco.Columns(posCol), TemplateColumn)
' tempcol.ItemTemplate = itov
Public Sub New(ByVal colonna As String, ByVal larg As Integer)
Me.column = colonna
Me.larghezza = larg
End Sub
Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
Dim l As New Literal
AddHandler l.DataBinding, AddressOf bindData
container.Controls.Add(l)
End Sub
Public Sub bindData(ByVal sender As Object, ByVal e As System.EventArgs)
Dim l As Literal = DirectCast(sender, Literal)
Dim container As DataGridItem = DirectCast(l.NamingContainer, DataGridItem)
Dim campo As String = DataBinder.Eval(container.DataItem, column)
l.Text = "<nobr style=""overflow:hidden; text-overflow:ellipsis; white-space:nowrap; width: " & larghezza.ToString() & "px"" title=""" & campo & """ > "
l.Text &= campo & "</nobr>"
End Sub
End ClassL'esempio può essere esteso a qualsiasi altra personalizzazione delle colonne del DataGrid.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.


