307 messaggi dal 13 luglio 2005
Ciao a tutti,
mi sto avvicinando da poco all' ASP.NET, quindi mi scuserete ... !
Sto cercando di creare un elenco di attività usando una GridView. Ogni attività ha una priorità, indicata da un numero. In una colonna dovrei avere, quindi, una DropDownList con l'elenco dei numeri indicanti tutte le priorità in corso e, per ogni riga, viene selezionato il numero riferito a quella riga.
Mi spiego meglio con un esempio. Supponiamo di avere 5 attività con priorità: 3, 5, 6, 8, 9. L'attività nella prima riga ha priorità 5, quindi nella DropDownList ci devono essere i numeri: 3, 5, 6, 8, 9 e deve essere selezionato il 5. L'attività nella seconda riga ha priorità 8, quindi nella DropDownList ci devono essere sempre gli stessi numeri, ma deve essere selezionato l'8. E così via ...
Ho usato il metodo GridView1_RowDataBound legato alle righe della GridView per poter inserire i numeri delle priorità nella DropDownList e poi selezionare quello relativo alla riga, ma come primo problema non riesco a "raggiungere" la DropDownList  ! Ho provato con FindControl, ma niente da fare ... !

Qualcuno sa darmi una mano?

Grazie a tutti.

Ciao.

Umb
69 messaggi dal 20 gennaio 2006
www.jntstudio.net
...Cosa stai utilizzando come database?
Quella è la prima cosa: i dati devono essere salvati da qualche parte per poter effettuare il databinding.

Poi devi creare gli oggetti e implementare i metodi di accesso ai dati per leggere/scrivere.

Poi puoi utilizzare semplicemente un ObjectDataSource e darlo in pasto alla tua GridView.

Successivamente sarà banale effettuare il databinding chiamando semplicemente la proprietà SelectedValue della tua DropDownList impstando il suo valore così, ad esempio: SelectedValue='<%# Eval("priority"))%>'

...Non è semplice dare suggerimenti azzeccati senza aver avuto uno sguardo d'insieme del codice che stai scrivendo ma spero di esserti stato d'aiuto.

BuonNatale a tutti!

JackNova (Dario Iacampo)
307 messaggi dal 13 luglio 2005
Ciao bacco82,
grazie per la risposta  !
Allora, cerco di essere più dettagliato ...
Utilizzo un database SQL e sto utilizzando un SqlDataSource per la GridView. I problemi, fondamentalmente, sono due:
1) l'elenco dei codici di priorità, che deve riempire la DropDownList, tenendo conto che questo elenco varia in funzione di un altro parametro che è il "gruppo di lavoro". In poche parole ogni riga della GridView deve calcolare l'elenco delle priorità, in base al valore dell'IDGruppoLavoro, e riempire la DropDownList (per questo volevo usare il metodo GridView1_RowDataBound)
2) nel metodo GridView1_RowDataBound riuscire a fare riferimento alla DropDownList che si trova in una colonna della GridView (un TemplateField). Ho provato con:

e.Row.FindControl("Priorita")

ma niente da fare

Usando il metodo GridView1_RowDataBound:
per il punto 1) ho creato la Function CalcolaElementi (che mi restituisce l'ultimo indice delle priorità), ma non riesco a ricavare il valore di IDGruppoLavoro per quella riga... Poi dovrei, con un ciclo ricorsivo, popolare la DropDownList da 1 all'indice trovato, ma ... non trovo la DropDownList  !!

Aiutoooo

Ciao.

Umb

P.S.: auguri a tutti di un felice 2008
Modificato da SUPERPIPPO2005 il 26 dicembre 2007 17.11 -
69 messaggi dal 20 gennaio 2006
www.jntstudio.net
non puoi calcolare ogni volta la priorità senza aver salvato l'informazione sul gruppo di lavoro da qualche parte credo

o a livello database fai 2 tabelle e mettile in relazione 1 a molti, nell'oggetto attività specificherai sia l'id del gruppo di lavoro, sia la priorità, e di conseguenza svilupperai codice e stored procedure facendo in modo che la funzione che restituisce la priorità riceva in ingresso l'id del gruppo di lavoro, in questo caso torno a ripetere SelectedValue='<%# Eval("priority"))%>' perché sarà un valore salvato in campo specifico del database.

in fase di scrittura invece popolerai la dropdownList con un metodo helper che restituisce l'elenco delle priorità e riceve in ingresso il gruppo di lavoro (che da qualche parte devi aver specificato)

Puoi anche scegliere di non mettere nel database quelle 2 tabelle di inserirle nel codice (hard coded) sotto forma di collection e salvare nel database solo l'id della priorità...

JackNova (Dario Iacampo)
307 messaggi dal 13 luglio 2005
Ciao bacco82,
la tabella che ho creato è unica ed ha le colonne:
- DescrizioneAttivita
- IDGruppoLavoro
- IndicePriorita

quindi con un primo dataset ricavo tutti gli IndiciPriorita in funzione degli IDGruppoLavoro e un secondo dataset (agganciato alla GridView) mi elenca tutti i record delle attività.

Ma ti ripeto quello che vorrei in prima battuta è, nel metoto GridView1_RowDataBound:
1) ricavare l'IDGruppoLavoro (che viene poi mostrato nella GridView)
2) raggiungere la DropDownList contenuta nella GridView per poter inserire l'elenco degli indici di priorità.

Ciao

Umb
69 messaggi dal 20 gennaio 2006
www.jntstudio.net
<asp:GridView ID="gvLavori" AutoGenerateColumns="false"
runat="server" OnRowCreated="gvLavori_RowCreated">
<Columns>
<asp:TemplateField HeaderText="Priorità">
<ItemTemplate>
<asp:DropDownList ID="ddlPriority"
AutoPostBack="true" runat="server"
OnSelectedIndexChanged="ddlPriority_SelectedIndexChanged">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>









protected void gvLavori_RowCreated(object sender,
GridViewRowEventArgs e)
{
if (!IsPostBack)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl =
(DropDownList)e.Row.FindControl("ddlPriority");
ddl.DataSource = ((WorkGroup)e.Row.DataItem).Priorities;
ddl.DataBind();
}
}
}

JackNova (Dario Iacampo)
307 messaggi dal 13 luglio 2005
Ciao bacco82,
grazie per il codice che mi hai postato  ! L'ho già provato e, finalmente, qualcosa "si muove"  ...

Ho un paio di dubbi, però... Il primo è poco importante (ma giusto per capire...): perchè hai usato il metodo gvLavori_RowCreated e non gvLavori_RowDataBound? Cosa cambia?

Il secondo dubbio è su una parte di codice che hai scritto, ovvero:

ddl.DataSource = ((WorkGroup)e.Row.DataItem).Priorities;

che cos'è "WorkGroup"? e perchè ".Priorities"?
... diciamo che il fatto che il codice sia scritto in C# già mi mette un po' in crisi visto che io uso il VB  ...
Se potessi spiegarmi in dettaglio cosa intendi te ne sarei grato.

Grazie ancora, ciao.

Umb
69 messaggi dal 20 gennaio 2006
www.jntstudio.net
Il codice chiaramente non è perfetto, l'ho postato come indicazione veloce per te dove poter prendere spunto.
RowCreated e RowDataBound accadono in momenti diversi, dai 1 occhiata al cilco di vita della pagine asp.net se non l'hai già fatto, c'è anche un poster carino che vale la pena tenere affisso nello studio :-D

// ddl.DataSource = ((WorkGroup)e.Row.DataItem).Priorities;

con questa riga faccio prima il casting di e.Row.DataItem convertendo in oggetto WorkGroup: ho impotizzato che nel codice tu abbia creato questo oggetto; poi invoco la proprietà Priorities che restituirà l'elenco delle priorità...

Non è da fare per forza così...

-Puoi anche mappare l'elenco di gruppi di lavoro/priorità direttamente da codice utilizzando delle collection e creando dei metodi helpers che restituiscono gli elenchi.

VB è brutto!! :-P

JackNova (Dario Iacampo)

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.