Community
Articoli
Software
Utility
Contatti

Ampliare l’ampiezza di un TextBox di un Gridview durante la fase di Edit
"Può accadere che il TextBox generato da un Gridview durante la fase di Editing di una riga non contenga interamente il testo della cella nel database sottostante l’applicazione tagliandolo, con un effetto antiestetico."

Categoria: Programmazione »» .Net Framework

A cura di: Luigi Corrias

Pubblicato il: domenica 3 dicembre 2006



Può accadere che il TextBox generato da un Gridview durante la fase di Editing di una riga non contenga interamente il testo della cella nel database sottostante l’applicazione tagliandolo, con un effetto antiestetico.

Il problema quindi è aumentare l’ampiezza del TextBox, ovvero trasformare il TextBox da

 

TextBox.TextMode = TextBoxMode.SingleLine

 

a

 

TextBox.TextMode = TextBoxMode.MultiLine

 

Per ovviare a tutto questo ho scritto il seguente pezzo di codice

 

Sub GridView_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GridView1.RowCreated

     

        If (e.Row.RowState And DataControlRowState.Edit) > 0 Then

           Dim pippo As New TextBox

            pippo = DirectCast(e.Row().Cells(4).Controls(0), TextBox)

            pippo.TextMode = TextBoxMode.MultiLine

 

        End If

 

End Sub

 

Leggendo la soluzione è possibile scoprire diversi aspetti del funzionamento del nuovo Gridview

Innanzitutto è necessario capire a quale evento innescare l’esecuzione del codice;

si è tentati di pensare che l’evento relativo sia

 

GridView_RowEditing

 

ma non è così poiché, nel momento di Editing, non esiste ancora il TextBox che deve essere modificato!

L’evento giusto è quello legato alla creazione di una riga;

da qui controlleremo poi se questa riga è in fase di Editing ed ancora se è nello stato normal o alternate;

se non specifichiamo se la riga selezionata è in stato Normal o Alternate il casting del nostro TextBox avverrà solo verso le righe in stato Normal!

Non è possibile controllare lo stato della riga attraverso un ciclo If.. Else poiché i diversi stati tendono ad escludersi a vicenda in maniera misteriosa;

 

Alternate indica che la row è nello stato Alternate. Questo stato può combinarsi tranquillamente con lo stato Normal, Edit, oppure Insert

 

Edit indica che la row è nello stato Edit innescato dalla pressione del link Edit relativo alla riga stessa. Lo stato Edit e quello Insert si escludono reciprocamente

 

Insert indica che la row è stata generata dopo la pressione di un pulsante Insert dedicato alla creazione di una nuova riga. Lo stato Edit e quello Insert si escludono reciprocamente.

 

Normal indica che la riga è in uno stato normale, cioé senza alcuna modifica. Lo stato Normal esclude reciprocamente tutti gli altri.

 

Selected indica che la riga è stata selezionata da un’utente

 

Utilizzare un ciclo condizionale If.. Else per controllare lo stato di una riga nel Gridview è una trappola piuttosto comune che genera un eccezione fatale.

Per evitare strani conflitti, dopo diversi frustranti tentativi, ho scoperto che era possibile utilizzare un operatore bitwise & che effettua una scelta confrontando i singoli bit;

lo stato delle singole rows può anche essere un flag numerico quindi se il confronto tra queste, a livello di bit, è maggiore di zero effettuiamo il DirectCast della quarta cella della riga;

utilizziamo DirectCast poiché, a differenza di Ctype, funziona quando uno dei membri sui quali effettuare la conversione deve ereditare dall'altro o implementarlo.

 






Lascia un commento

 
Tua email: (non verrà visualizzata)
Nome:
Commento:
Codice di sicurezza:
 

Digita il codice
visualizzato
a sinistra
Commenta




IPROGRAMMATORI.IT 2010. Tutti i diritti riservati. - P.IVA 04135460873 | Pubblicità | Termini e Condizioni - Privacy Policy | Utenti connessi : 56 | RSS 2.0 - Le news di IProgrammatori.itRSS