Conversione dal tipo numerico al tipo text in colonna Datagridview

martedì 25 novembre 2008 - 10.24

motogpdesmo16 Profilo | Senior Member

Salve a tutti amici,
il mio problema è il seguente: in una colonna di una tabella del mio DB viene inserito un numero in formato numerico, praticamente un id_utente di grandi dimensioni (esempio: 1608135936). Avrei la necessità di passare questo ID ad una funzione che provvede a restituirmi il nominativo dell'utente in questione. Tale nominativo vorrei ottenerlo in una colonna della mia datagridview.
L'estrazione dei dati e la successiva valorizzazione della Datagridview non mi crea problemi, infatti il metodo che ho utilizzato funziona correttamente e provvede a valorizzarmi la colonna in questione con l'id numerico a cui ho fatto riferimento prima. Per ottenere la "conversione", ho pensato di procedere in questa maniera: il campo predisposto per la griglia l'ho dichiarato come Template Columns - Literal
<asp:TemplateField>
<ItemTemplate>
<asp:Literal ID="ltlNome" runat="Server" ></asp:Literal>
</ItemTemplate>
</asp:TemplateField>

Nell'evento "RowDataBound" ho scritto questo codice:
If (e.Row.RowType = DataControlRowType.DataRow) Then Dim oLtl As New Literal oLtl = e.Row.FindControl("ltlNome") If Not oLtl Is Nothing Then Dim id_User As Long id_User = CType(e.Row.Cells(0).Text, Long) oLtl.Text = GetNome(id_User).name.tostring() End If End If
all'esecuzione della pagina il debugger si ferma nel metodo suddetto per segnalarmi "Cast non valido dalla stringa "" al tipo 'Long'." Di fatto nella cella io ho "" (valore vuoto) quindi forse sto tentando un cast troppo presto rispetto alla reale valorizzazione dei dati che di fatto avviene al load della pagina?
Spero sappiate aiutarmi. grazie.

p.s.: se qualcuno ha qualche idea in merito a questo thread (http://www.dotnethell.it/forum/messages.aspx?ThreadID=26859) o almeno lo possa portare "up". grazie.

balfaz Profilo | Expert

per caso stai facendo il cast a una colonna invisibile???
"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

motogpdesmo16 Profilo | Senior Member

No no, la colonna è visibile.
D'altronde, per prova, ne ho inserita solo una e cioè quella che ho dichiarato nell'ItemTemplate.

balfaz Profilo | Expert

allora e quello il problema, non cercare il valore dentro la cella, ma bensì dentro il controllo che si trova nell'itemtemplate cioe

If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim oLtl As New Literal
oLtl = e.Row.FindControl("ltlNome")

If Not oLtl Is Nothing Then
Dim id_User As Long
id_User = CLng(oLtl.text) <----aggiunge questo
oLtl.Text = GetNome(id_User).name.tostring()
End If
End If

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

motogpdesmo16 Profilo | Senior Member

Ti ringrazio per l'aiuto ma purtroppo continua a non riuscire a castare il contenuto del campo.
Dopo il tuo suggerimento ho modificato così il mio codice nel RowDataBound:

If (e.Row.RowType = DataControlRowType.DataRow) Then Dim oLtl As New Literal oLtl = e.Row.FindControl("ltlNome") If Not oLtl Is Nothing Then Dim id_User As Long id_User = CLng(oLtl.Text) oLtl.Text = GetNome(id_User).name.ToString() End If End If

Che mi sia sfuggito qualcosa del tuo suggerimento?

balfaz Profilo | Expert

If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim oLtl As New Literal = CType(e.Row.Cells(0).FindControl("LitDv"), Literal)

If Not oLtl.text Is Nothing Then
Dim id_User As Long
id_User = CLng(oLtl.Text)
oLtl.Text = GetNome(id_User).name.ToString()
End If
End If

prova cosi, ho aggiunto nella condizione una modifica, prova e vediamo

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

motogpdesmo16 Profilo | Senior Member

Ho risolto, dopo diversi tentativi, in questa maniera

If (e.Row.RowType = DataControlRowType.DataRow) Then Dim oLtl As New Literal oLtl = e.Row.FindControl("ltlNome") If Not oLtl.Text Is Nothing Then Dim id_User As Long id_User = CLng(DataBinder.Eval(e.Row.DataItem, "Id_User")) oLtl.Text = _fbService.API.users.getInfo(id_User).name.ToString() End If End If

Grazie comunque per il tuo supporto!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5