Valori Text Box

lunedì 05 dicembre 2005 - 15.13

Pongo Profilo | Senior Member

Ciao a tutti! Ho un piccolo problema!
Ho dei valori dentro un datagrid associato ad un dataset. Quando metto il valore edit item sulla riga del data grid i campi del datagrid si trasformano in textbox ma poi non riesco e prendere i valori. Nel codice sotto ho messo dei label tanto per vedere i valori raccolti, e i valori raccolti sono quelli immessi prima della modifica. E queol Controls[0] che soignifica? Che prende solo il primo elemento denro la textbox?




tb = (TextBox) (e.Item.Cells[2].Controls[0]);
titolo = tb.Text.Trim();
Label1.Text=titolo;
tb = (TextBox) (e.Item.Cells[3].Controls[0]);
ruolo = tb.Text.Trim();
Label2.Text=ruolo;
tb = (TextBox) (e.Item.Cells[4].Controls[0]);
nominativo = tb.Text.Trim();
Label3.Text=nominativo;
tb = (TextBox) (e.Item.Cells[5].Controls[0]);
indirizzo = tb.Text.Trim();
Label4.Text=indirizzo;


Pongo Profilo | Senior Member

Scusa ma no ho capito bene! ^_^

Dove dovrei usarlo? E "MioID" che cosa sarebbe?

Pongo Profilo | Senior Member

Vabbè, scusami se son stupido, ma non ho capito. E' il primo progetto che faccio con .net, ste robe le ho tirate fuori dal tutorial, io non ho inserito proprio nulla nelle colonne da modificare, do l'inidice della riga da modificare e i campidati si trasformato in textbox. a sto punto vedo che fa un cast ma non riesco a capire perchè non prenda il valore giusto.
Find controls a che serve? E dove dovrei usarlo?

Grazie!



Pongo Profilo | Senior Member

>>Allora devi sempre dare un'id ai controlli o in automatico li dà vs con lo standard textbox1, textbox2 ecc

Ok, metto sempre il nome, in questo caso il controllo che mi interessa è il mio DataGrid1, vero??

>>FindControl ti serve proprio per recuperare i controlli e sei sicuro di recuperarli.
>>questo che hai scritto tu devi trasformarlo in

questo è quello che scrivevo copiando dal tutorial:
>>tb = (TextBox) (e.Item.Cells[2].Controls[0]);
>>titolo = tb.Text.Trim();

E questo quello che mi hai suggerito:
>>tb = (TextBox) (e.Item.FindControl("idcontrollo");
>>titolo = tb.Text.Trim();

Al posto di quell'id controllo ho metto "DataGrid1" ma mi dava quest'errore:
System.NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto

Che cosa devo cambiare?

Grazie! ^_^

Pongo Profilo | Senior Member




//tb = (TextBox) (e.Item.Cells[2].Controls[0].FindControl("tb"));
//tb=(TextBox) e.Item.Cells[2].FindControl("tb");
//tb = (TextBox) (e.Item.Cells[2].Controls[0].FindControl("DataGrid1:tb"));
//tb = (TextBox) (e.Item.FindControl("tb"));
tb=(TextBox)e.Item.Cells[2].FindControl("DataGrid1:tb");//Controls[0];
//tb=(TextBox)()
titolo = tb.Text;
Label1.Text=titolo;

Non so che altre combinazioni usare!

Forse sarà una cazzata, ma ci sto perdendo un pomeriggio! -_-'

Pongo Profilo | Senior Member

string key = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
Label5.Text=key;
string ruolo;
string titolo;
string nominativo;
string indirizzo;

TextBox tb;


tb=(TextBox)(e.Item.Cells[2].Controls[0]);
titolo=tb.Text;
Label1.Text=titolo;
tb = (TextBox) (e.Item.Cells[3].Controls[0]);
ruolo = tb.Text;
Label2.Text=ruolo;
tb = (TextBox) (e.Item.Cells[4].Controls[0]);
nominativo = tb.Text;
Label3.Text=nominativo;
tb = (TextBox) (e.Item.Cells[5].Controls[0]);
indirizzo = tb.Text;
Label4.Text=indirizzo;

DataSet_Contatti.TB_ContattiRow r;
r=dataSet_Contatti1.TB_Contatti.FindByID_Contatto(int.Parse(key));
r.Nominativo=nominativo;
r.Ruolo=ruolo;
r.Titolo=titolo;
r.Indirizzo_Mail=indirizzo;


Questo è il mio codice; Ho guardato in giro per mari e per monti ma alla fine dovrebbe essere giusto come me lo proponeva microsoft. Il mio problema è che non riesco a ottenere il valore della TextBox.

Perchè?

Ah, no problem per il fatto che hai capito male tu all'inizio, ne ho approfittato per imparare un po' di cose che non guastano mai! ^_^


Pongo Profilo | Senior Member

Purtroppo si! -_-'

Ma adesso sono a casa, quindi non posso postare tutto il codice.

Nn è che si sia imbarazzato IIS? Con apache mi succedeva spesso che errori incomprensibili sparissero con lo stop e riavvio del servizio.

Boh, domani proverò. Se non è questo devo averne fatta una di così grande da non considero nemmeno possibile fare! asd


A domani e grazie intanto! ^_^

Pongo Profilo | Senior Member

private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
//riga modificata
string key = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
Label5.Text=key;
string ruolo1;
string titolo1;
string nominativo1;
string indirizzo1;

TextBox tb=new TextBox();

//tb=((TextBox) e.Item.Cells[2].Controls[0]);
tb.Text=((TextBox) e.Item.Cells[2].Controls[0]).Text;
titolo1=tb.Text;
Label1.Text=titolo1;

//tb = (TextBox) (e.Item.Cells[3].Controls[0]);
tb.Text=((TextBox) e.Item.Cells[3].Controls[0]).Text;
ruolo1 = tb.Text;
Label2.Text=ruolo1;

//tb = (TextBox) (e.Item.Cells[4].Controls[0]);
tb.Text=((TextBox) e.Item.Cells[4].Controls[0]).Text;
nominativo1 = tb.Text;
Label3.Text=nominativo1;

//tb = (TextBox) (e.Item.Cells[5].Controls[0]);
tb.Text=((TextBox) e.Item.Cells[5].Controls[0]).Text;
indirizzo1 = tb.Text;
Label4.Text=indirizzo1;

DataSet_Contatti.TB_ContattiRow r;
r=dataSet_Contatti1.TB_Contatti.FindByID_Contatto(int.Parse(key));
r.Nominativo=nominativo1;
r.Ruolo=ruolo1;
r.Titolo=titolo1;
r.Indirizzo_Mail=indirizzo1;

//invio le modifiche al db
sqlDataAdapter1.Update(dataSet_Contatti1);
DataGrid1.DataBind();
//esco dalla modalità modifica
DataGrid1.EditItemIndex = -1;
DataGrid1.DataBind();

}


Questo è il codice completo del mio update! Le righe con comandi commentati sono tenativi. Praticamente non riesco ad accedere ai nuovi valori che inserisco nella text box che mi appare quando vado in modalità edit item. L'update funziona, infatti se metto io da codice dei valori di riga "a mano" questi vengono inseriti sia nel DB che nella mia DataGrid.

Se qualcuno vede qualche errore, lo ringrazio! ^_^

Pongo Profilo | Senior Member

private void Page_Load(object sender, System.EventArgs e)
{
// Inserire qui il codice utente necessario per inizializzare la pagina.

sqlDataAdapter1.Fill(dataSet_Contatti1);
DataGrid1.DataBind();

}

Il mio page load è questo!

Se io inserisco "a mano" dei dati, invece di prenderli dai text box del data grid questi vengono catturati e aggiorno il tutto, il problema è prorpi prendere i data dai textBox.



Pongo Profilo | Senior Member

Ho provato, ma appena schiaccio modifica, mi sparisce la tabella e restano solo le intestazioni.

Devo abilitare qualcosa dle datagrid? Qualche post back?

E che cos'è esattamente il postBack?

Ciao e Grazie! ^_^

Pongo Profilo | Senior Member

Allora dopo proverò a togliere il dataBind() dal postBack del page load!



Pongo Profilo | Senior Member

Ok, adesso funziona!

Dovevo togliere il fill dal post back!

Guardando ora il tutto sembra una schiocchezza, ma prima veramente non riuscivo ad andarne fuori!

Grazie mille del supporto! ^_^

Alla prossima!

Pongo Profilo | Senior Member

Rieccomi! -_-'

Quella di prima era una prova! Adesso ho altri problemi,penso sia sempre con il post back, ma a sto punto ve lo chiedo!

Il mio applicativo funziona così: seleziono un cliente, e schiaccio un bottone Ok.
Nell'evento del bottone cambio la select del dataadapter, faccio un fill e faccio il bind del datagrid.

Quando voglio modificare la tabella mi spariscono tutti i dati. Come faccio?

Nel mio page load non ho inserito nulla poichè il dataadapter e la tabella vengono riempiti solo una volta selezionato il cliente.





Pongo Profilo | Senior Member

Da prima avevo capito che ogni volta che io schiaccio un tasto viene lanciato il page load, vero?
Prima, nella prova dove tutto funzionava il page load era così:

sqlDataAdapter1.Fill(dS_Contatti1);
if(!Page.IsPostBack)
{

DataGrid1.DataBind();
}


Adesso nella mia pagina il page load è vuoto e il codice sopar è inserito direttamente negli eventi, ma purtroppo non succede nulla.

RETTIFICO: ho tolto il (!Page.IsPostBack) e funziona!

Chissa se un giorno riuscirò a comprendere questo PageLoad e questo IsPostBack! ^_^

Pongo Profilo | Senior Member

NO, non funzionava.

Mi son omesso a fare 120000 stampe e ho trovato l'inghippo, ma non riesco a capacitarmi.

Se io dichiaro un campo dati nella classe principale, che se non ho capito male è la pagina, e poi da qualche parte inizializzo quella variabile mi aspetterei di trovarla già con un valore da me definito quando mi trovo a richiamarla dopo, e invece no.

Questo per me è molto strano.

Cioè anche il data adapter con la select cambiata: in ogni evento devo cambiarla.

Perchè c'è questo comportamento?

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