Gridview e casting da stringa a linkbutton che va in errore

mercoledì 16 settembre 2009 - 23.22

cosmopsis Profilo | Junior Member

Ho composto un dataTable; ho fatto il binding ad una gridview.
Voglio che una colonna della gridview --che si formerà quando si travaseranno i dati dalla dataTable -- sia trasformata a runtime in linkbutton (è stringa in origine). Per fare questo faccio la promozione nell'evento RowDataBound:

If e.Row.RowType = DataControlRowType.DataRow Then
DirectCast(e.Row.Cells(3).Controls(0), LinkButton).Text = "testodamettere"
...

Ma mi appare l'errore: "Argomento specificato non compreso nell'intervallo. Nome parametro: index".
Se invece carico la grid attraverso un oggetto SqlDataSource l'istruzione funziona correttamente.
Sperando di esere stao chiaro vi chiedo cosa ci sia di sbagliato nell'istruzione di casting?
ciao.

Gluck74 Profilo | Guru

dunque, non sono sicuro che sia questo il motivo, ma se posti un po più di codice lo capiamo subito:

potrebbe essere che la dataTable che costruisci sia diversa da quella creata dal sqlDataSource, quindi in quel punto il controllo che tu cerchi di scrivere non esista.
per questo io ti suggerirei di agire in questa maniera cambiando di poco il codice:

LinkButton lnkBtn = (LinkButton)e.Row.FindControl("idCheHaiPerIlControlloNelTemplate"); if (lnkBtn != null) lnkButton.Text = "testoDaMettere";

scusa se ho scritto in c#, ma credo sia facile per te convertirlo. in sostanza dovresti usare il FindControl e controllare che il controllo esista prima di assegnare valori alle proprietà

cosmopsis Profilo | Junior Member

Scusa ma ho visto la risposta solo adesso.
Ho trovato la soluzione in questo modo:

Nell'evento RowDataBound():
Dim bottone As New Button()
If e.Row.RowType = DataControlRowType.DataRow Then
...
e.Row.Cells(3).Controls.Add(bottone)
...
End If

Per prelevare un valore dalla riga nell'evento RowCommand():
Dim c As Control = DirectCast(e.CommandSource, Control)
Dim r As GridViewRow = DirectCast(c.NamingContainer,
GridViewRow)
Dim valoreCella = r.Cells(1).Text


ciao.

Gluck74 Profilo | Guru

be ma questo è diverso dal problema iniziale.....

comunque, l'importante è che hai risolto.

ciao
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5