26 messaggi dal 08 dicembre 2002
Ciao ragazzi,
ho un problema che mi tormenta da un po..
Premetto che uso vs.net come ambiente di sviluppo.
In una webform ho un datagrid. I dati che popoleranno il datagrid sono presi da un database.. e fin qui tutto ok.
Oltre ai dati del database vorrei inserire una colonna con un checkbox (e fin qui riesco..)
Il problema nasce quando voglio andare a gestire lo stato dei checkbox nel datagrid!!!

Il codice html per aggiungere il check che ho usato è:
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox id="CHECK1" Visible="True" Runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>

Infatti nel datagrid vedo un checkbox per ogni riga della tabella.
L'utente che visita il sito dovrà avere la possibilità di selezionare un certo numero di righe della tabella mettendo lo spunto nel checkbox e con un tasto passare ad un'altra webform dove visualizza solo quelli selezionati in un elenco per la stampa.
A parole è molto semplice.. per me che vengo da vb6, se avessi dovuto farlo con tale linguaggio lo avrei fatto ad occhi chiusi!!
Non riesco ad associare lo stato dei checkbox ad una variabile!
Gli array sono ingestibili..
Se anche associo uno script all'evento "OnCheckedChanged" del checkbox.. come poi identifico in quale riga ho selezionato il check??
L'id è solo CHECK1.. boo!!!
Sto un po' impazzendo!

Aiutatemi dato che sono alle prime armi con vs.net.

Grazie!
Andrea
Spero di essere stato chiaro
Le matrici di oggetti stile vb6 non esistono più, potresti crearti un array di oggetti ma se sfrutti i template non ha molto senso.
La checkbox va a popolare la collezione Controls della cella per ogni Item del datagrid, quindi per scorrere fai

foreach(DataGridItem item in lista.Items)
{
CheckBox check=(CheckBox)item.FindControl("check");
Response.Write(check.Checked+"<br>");
}

dall'oggetto item, se sfrutti il DataKey sai magari anche l'id del record ecc e da lì sei apposto.
Non è sbagliato neanche usare l'evento CheckedChanged. Per sapere quali dei tanti checkbox ha scatenato l'evento, usa il pramentro sender, fai un cast sul checkbox, però dopo come identifichi il record, la riga, o la descrizione?

Ciao

Il mio blog
Homepage
26 messaggi dal 08 dicembre 2002
Grazie per gli aiuti!
Ho scritto lo script così:

<script language=javascript runat="server">
function clickko() {
foreach(DataGridItem item in lista.Items)
{
CheckBox check=(CheckBox)item.FindControl("check");
Response.Write(check.Checked+"<br>");
}
}
</script>

e lo ho associato al pulsante.
Per prima cosa mi da un errore nella prima riga (quella del foreach) e mi dice che manca un operatore tipo "," oppure ")".. ma non capisco dove e perchè!
Altra cosa.. non è che riesci a scrivere questo script in vb.. che mi risulta più facile da capire?

Grazie mille.
Ma che linguaggio stai usando?
Hai messo
<script language=javascript runat="server">
J#, c# o vb.net?
Comunque in vb
dim item as DataGridItem

for each (item in lista.Items)
dim check CheckBox =DirectCast(item.FindControl("check"), CheckBox)
Response.Write(check.Checked & "<br>")
next

Ciao

Il mio blog
Homepage
26 messaggi dal 08 dicembre 2002
Ho inserito il codice come me lo hai scritto tu..
Ovviamente l'ho messo dentro una sub legata all'evento onclick del pulsante.

L'unica cosa diversa, ho sostituito "lista" che tu avevi scritto con "Datagrid1". E' corretto?
Mi da questo errore proprio in quella linea?!

Expression is a value and therefore cannot be the target of an assignment.

Probabilmente dove hai scritto lista dovrò andare ad indicare anche la tabella specifica dove sono i check.. provo a lavorarci sopra!
Se intanto riesci a darmi altre indicazioni..

Grazie mille!!
Andrea
Leva le parentesi a foreach
for each item in lista.Items
mi sono confuso con c#
lista è la variabile che contiene il riferimento all'istanza del datagrid, l'id insomma

Ciao

Il mio blog
Homepage
26 messaggi dal 08 dicembre 2002
Mitico!
Ci sono saltato fuori!!!
Ho dovuto lavorarci un po' su quello che mi hai inviato ma.. ti ringrazio a bomba!!

Posso chiedere un'altra cosa?
Ora sto lottando nel inserire i valori di una colonna di un datareader in una struttura di stringhe..
del tipo:

dim miastringa() as string
miastringa=datareader1.item("Data")

Mi sarebbe piaciuto fare una cosa del genere..
Innanzi tutto vi spiego perchè vorrei una cosa del genere:

dopo aver sistemato i checkbox (problema iniziale) adesso ho in mano la lista dei checkbox selezionati in una pagina.
quasta lista la passo ora in un'altra pagina e fin qui tutto ok.

In questa nuova pagina però vorrei visualizzare l'elenco dei dati della tabella relativi ai checkbox selezionati.

Faccio un esempio:
1. cane [ ]
2. gatto [x]
3. topo [ ]
4. giraffa [x]

se questa è la mia tabella, coi checkbox schematizzati, premendo un pulsante, visualizzo un'altra pagina con la stessa tabella ma:

1. gatto
2. giraffa

Chiaro?
Arrivo ad avere l'elenco dei selezionati e la tabella completa dei dati riprelevati del database.

Stavo pensando a 2 strade (consigliatemi..):
1. Inserire il tutto in un string() ed eliminare quelli non selezionati
2. modificare una colonna che aggiungerei nel database dove indico il valore dei checkbox e nella seconda pagina faccio la select di solo quelli con il valire a 1.

La seconda mi sembra molto più lenta e laboriosa.. la prima??

Scusate la palla ma vorrei migliorare a programmare e proporre le mie idee penso sia un buon modo per confrontarmi..

Grazie ciao
Andrea
Dalla var item del ciclo puoi accedere alle varie celle e usare anche lì findControl per cercare il label o quant'altro che contiene la stringa gatto ecc, oppure usare la sua proprietà DataItem che ti passa il record, del datasource, però in postback mi pare che non sia più a disposizione.
Insomma, una volta che hai 'gatto' fai un array di stringhe che passi alla seconda pagina per ripetere i dati.
La soluzione del database non va bene, se più utenti stanno scegliendo che fai?
Oppure usa la pagina stessa, in base al ciclo che hai fatto prima, memorrizi, invece della stringa, l'id del record. Usi lo stesso datagrid con il quale mostri gatto, giraffa ecc, ma elimini a runtime la colonna che contiene i checkbox.
In seguito dal DataBinding del datagrid, filtri le sue righe eliminado gli items che non sono stati checckati, confrontando, l'id dell'item (proprietà DataItem) e con il tuo array di id creato precedentemente.

Spero di esserti stato d'aiuto

Ciao

Il mio blog
Homepage

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.