56 messaggi dal 17 ottobre 2001
Ciao a tutti,
Il mio problema è un po' complicato ma cercherò di spiegarlo bene.
HO un dataGrid con con tre checkBox per ogni riga.
I checkbox vengono selezionati (o meno) al caricamento del dg in questo modo:
<asp:TemplateColumn HeaderText="Solo Lettura">
<ItemTemplate>
<asp:CheckBox ID="chk1_ReadOnly" onClick="chk(this,'_chk1_ReadOnly','RO')" runat="server" checked='<%# getStatus(Container.dataitem("ReadOnly")) %>'></asp:CheckBox>
</ItemTemplate>

Questo comando <%# getStatus(Container.dataitem("ReadOnly")) %> mi retituisce 'true'/'false'.

Ho la necessità di chiamare una funzione javascript all'evento onClick del checkbox, per recuperare l'indice della riga del checbox, ma editando la pagina risultante il comando onClick viene inserito in un tag <span> in questo modo:
<span onClick="chk(this,'_chk1_ReadOnly','RO')">
<input id="dgr_Permessi__ctl2_chk1_ReadOnly" type="checkbox" name="dgr_Permessi:_ctl2:chk1_ReadOnly" />
</span>
Praticamente in questo modo non riesco ad recuperare l'id dell'oggetto che passo alla funzione con 'this'.

Ho quindi provato ad utilizzare un checkbox html nel modo seguente:

<input type=checkbox ID="chk1_ReadOnly"
onClick="chk(this,'_chk1_ReadOnly','RO')" runat="server" '<%# getChecked(Container.dataitem("ReadOnly")) %>'>

In questo modo risolvo il problema,  ma ne sorge un'altro  ; durante il caricamento del datagrid viene genarato un errore dovuto al tentativo di recuperare la scritta 'checked'>.

Avete qualche suggerimento?

Ciao e grazie
18 messaggi dal 26 settembre 2001
Mi sono capitati problemi analoghi, una soluzione potrebbe essere il mettere in una variabile js il clientID dell''eggotto htm.
In pratica gli passi il nome che avrà il checkbox lato client.

Ciao
56 messaggi dal 17 ottobre 2001
Risolto  !!!!!!!

Posto la soluzione e ringrazio alfonso2 per l'interessamento.

All'interno del dataGrid ho inserito il checkbox html nudo e crudo:
<ItemTemplate>
<input type=checkbox ID="chk1_ReadWrite" name="chk1_ReadWrite" onClick="chk(this,'_chk1_ReadWrite','RW')" runat="server">
</ItemTemplate>

la funzione js non fa altro che recuperare l'id della riga del checkbox in questione, sostituendo all'id del checkbox tutto cio che non è utile:

function chk(obj,subst,type)
{
myStr=obj.id;
myStr=myStr.replace("dgr_Permessi__ctl","")
myStr=myStr.replace(subst,"")
if (obj.checked)
Form1.arr_chk.value=Form1.arr_chk.value + myStr + type + "|";
else
Form1.arr_chk.value=Form1.arr_chk.value.replace(myStr + type + "|","");
}

Da codice, quando leggo i dati mi carico un array a due dimensioni utilizzando una struttura:

...
'richiamo sub
riempiArr(myDs.Tables("PermessiTipoUtenti"))

Private Sub riempiArr(ByVal myTbl As DataTable)
Dim i As Int16
ReDim Preserve arrChkbox(myTbl.Rows.Count - 1)
For i = 0 To myTbl.Rows.Count - 1
arrChkbox(i).LetturaScrittura = myTbl.Rows.Item(i).Item(4)
arrChkbox(i).SoloLettura = myTbl.Rows.Item(i).Item(5)
arrChkbox(i).SoloStampa = myTbl.Rows.Item(i).Item(6)
Next
End Sub

Private Structure myData
Private myData()
Public LetturaScrittura As Boolean
Public SoloLettura As Boolean
Public SoloStampa As Boolean
End Structure

Assegno lo stato al checkbox durante il caricamento del datagrid sfruttando il comando "OnItemDataBound" in questo modo:

Public Sub eseguiControlli(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgr_Permessi.ItemDataBound
'esempio per un solo checkbox
Dim i As Int16
Dim chk As HtmlInputCheckBox
If e.Item.ItemType = ListItemType.Item Or _
e.Item.ItemType = ListItemType.AlternatingItem Then
i = e.Item.Cells(4).ID
chk = CType(e.Item.Cells(4).FindControl("chk1_ReadWrite"), HtmlInputCheckBox)
chk.Checked = arrChkbox(i).LetturaScrittura
End If

End Sub


Ciao a tutti e ancora grazie.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.