Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
GridView, recuperare il valore di un campo modificato
giovedì 03 luglio 2008 - 12.43
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
sarcidi
Profilo
| Newbie
49
messaggi | Data Invio:
gio 3 lug 2008 - 12:43
Salve a tutti,
ho un GridView (composto da due colonne, "OT_DATE" e "OT_TEXT") che popolo
così (non uso per il momento ObjectDataSource):
{
....
IList<Oli_text> text = my_bl.GetTextFromSQL(DEFAULT_LANG, value);
this.Session["OLI_TEXT"] = text;
GridView1.DataSource = text;
string[] datakeys = { "OT_DATE" };
GridView1.DataKeyNames = datakeys;
GridView1.DataBind();
....
}
La proprietà AutoGenerateEditButton è a True.
Quando premo il pulsante "Modifica" viene chiamato questo metodo:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataSource = this.Session["OLI_TEXT"];
string[] datakeys = { "OT_DATE" };
GridView1.DataKeyNames = datakeys;
GridView1.DataBind();
}
A questo punto la colonna "OT_TEXT" diventa editabile ed io cambio il testo.
Premendo, successivamente, "Aggiorna", viene chiamato questo metodo:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = GridView1.Rows[e.RowIndex];
string modifiedText = row.Cells[1].Text.ToString(); // ****
GridView1.EditIndex = -1;
}
Qualcuno potrebbe spiegarmi perché alla riga contrassegnata da "****" c'è il
valore del campio OT_DATE (che mi aspetterei di trovare all'indice 0...) ?
Per farla in breve, come faccio a recuperare il valore del testo modificato
(campo "OT_TEXT") ?
Grazie infinite a chi vorrà aiutarmi.
Sergio
paoval72
Profilo
| Senior Member
297
messaggi | Data Invio:
gio 3 lug 2008 - 15:10
Ciao, ma la colonna dell'edit in che posizione l'hai messa? Se è all'inizio della griglia (dove per default la inserisce VS), sarà lei la cell[0].
Ciao,
Paolo
sarcidi
Profilo
| Newbie
49
messaggi | Data Invio:
gio 3 lug 2008 - 15:18
>Ciao, ma la colonna dell'edit in che posizione l'hai messa? Se
>è all'inizio della griglia (dove per default la inserisce VS),
>sarà lei la cell[0].
Ciao,
le colonne sono (in ordine) OT_DATE, OT_TEXT.
OT_DATE è settata come DataKey (questo forse è il motivo per cui quando modifico mi rende editabile automaticamente OT_TEXT).
Tutto è gestito da codice (vedi listato).
Grazie.
Sergio
paoval72
Profilo
| Senior Member
297
messaggi | Data Invio:
gio 3 lug 2008 - 15:27
ma la colonna dell'edit dov'è? Prima delle tue colonne?
Visto che è in autogenerazione, come ti ho scritto, dovrebbe essere aggiunta di default alla sinistra delle tue colonne.
sarcidi
Profilo
| Newbie
49
messaggi | Data Invio:
gio 3 lug 2008 - 15:32
>ma la colonna dell'edit dov'è? Prima delle tue colonne?
>Visto che è in autogenerazione, come ti ho scritto, dovrebbe
>essere aggiunta di default alla sinistra delle tue colonne.
La GridView si presenta così:
[Modifica] [Elimina] [ot_date] [ot_text]
Quando premo su [Modifica] si rende editabile [ot_text]
Sergio
paoval72
Profilo
| Senior Member
297
messaggi | Data Invio:
gio 3 lug 2008 - 15:58
Ok, come ti ho scritto la cell[0] corrisponde all'edit/delete, la cell[1] alla tua prima colonna di testo.
Dunque:
row.Cells[0] è Edit/delete (In pratica i due bottoni sono due controlli in una sola colonna)
row.Cells[1] è OT_DATE,
row.Cells[2] è OT_TEXT
Per sicurezza, se vuoi, prova ad entrare in debug e a mettere un punto di controllo all'entrata dell metodo GridView1_RowEditing e a passare nella finestra di controllo immediato ogni cella.
row.Cells[0].Controls.Count dovrebbe darti 3: cioè:
1) scrivi: row.Cells[0].Controls[0], dovresti ottenere {Text = "Edit"}
2) scrivi: row.Cells[0].Controls[1], dovresti ottenere {System.Web.UI.LiteralControl}
Se vuoi il testo del Literal, fai il cast
((LiteralControl)row.Cells[0].Controls[1]).Text
e dovresti ottenere
" ", cioè uno spazio vuoto
3) scrivi: row.Cells[0].Controls[0], dovresti ottenere {Text = "Delete"}
Ultima cosa: puoi evitare di fare il .toString() al text, che tanto restituisce già una stringa.
Spero di essere stato utile e chiaro.
Ciao,
Paolo
sarcidi
Profilo
| Newbie
49
messaggi | Data Invio:
gio 3 lug 2008 - 16:22
>Ok, come ti ho scritto la cell[0] corrisponde all'edit/delete,
Ok.
>la cell[1] alla tua prima colonna di testo.
Ok.
>Dunque:
>row.Cells[0] è Edit/delete (In pratica i due bottoni sono due
>controlli in una sola colonna)
>row.Cells[1] è OT_DATE,
>row.Cells[2] è OT_TEXT
Perfetto.
Problema: perché nella GridView1_RowUpdating la row.Cells[2].Text è uguale a "" nonostante io abbia inserito del testo?
Come posso recuperare, al fine di inserirlo in un db, il nuovo testo?
>Per sicurezza, se vuoi, prova ad entrare in debug e a mettere
>un punto di controllo all'entrata dell metodo GridView1_RowEditing
>e a passare nella finestra di controllo immediato ogni cella.
>row.Cells[0].Controls.Count dovrebbe darti 3:
Ok.
>1) scrivi: row.Cells[0].Controls[0], dovresti ottenere {Text
>= "Edit"}
>
>2) scrivi: row.Cells[0].Controls[1], dovresti ottenere {System.Web.UI.LiteralControl}
>Se vuoi il testo del Literal, fai il cast
>((LiteralControl)row.Cells[0].Controls[1]).Text
>e dovresti ottenere
>" ", cioè uno spazio vuoto
>
>3) scrivi: row.Cells[0].Controls[0], dovresti ottenere {Text
>= "Delete"}
Ok.
>Spero di essere stato utile e chiaro.
Non mi sono chiari i seguenti punti:
- se row è la riga e Cells[x] è la colonna, perché a parità di riga e colonna ho tanti controlli? (Controls infatti è indicizzato).
- come faccio (domanda originaria) a recuperare ciò che l'utente ha scritto nella cella a seguito della pressione del tasto "Modifica" ?
Grazie.
Sergio
sarcidi
Profilo
| Newbie
49
messaggi | Data Invio:
gio 3 lug 2008 - 18:00
Rileggendo meglio il tuo post, ho capito il tuo suggerimento, scrivendo:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = GridView1.Rows[e.RowIndex];
TextBox tb = (TextBox)row.Cells[2].Controls[0];
string modifiedText = tb.Text;
.....
}
Grazie per il tuo aiuto.
Sergio
Torna su
Stanze Forum
Elenco Threads
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 !