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 Class
L'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.