Textbox

lunedì 15 dicembre 2008 - 00.39

fabi2089 Profilo | Junior Member

salve a tutti,
ho aggiunto un bindingnavigator ad un form e succesvamento ho associato una textbox con il metodo databindings. solo che dopo mi server prendere il valore all'interno dela text ma non mi da la possibilità.. vi ringrazio anticipatamente

freeteo Profilo | Guru

Ciao,
cosa intendi quando dici che non te lo permette?
Se hai bindato con dei dati, la proprietà "Text" della tua TextBox è cmq riempita con i valori che hai come datasource in quel momento, quindi se hai una DataTable impostata come "source" del bindingSource ad esempio, avrai visualizzata la cella di colonna pari a quello che hai bindato nella textBox, ma della riga corrente.

Se poi ti sposti segue la navigazione ovviamente...

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

fabi2089 Profilo | Junior Member

nel senso che vorrei prendere il valore all'interno della text (es: textbox1.text) solo che mi crea un eccezione...

freeteo Profilo | Guru

puoi allegare il codice della form dove hai la textbox?
Così posso indagare perchè non capisco come possa darti un'eccezione...

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

fabi2089 Profilo | Junior Member

eseguo una query (string query = "SELECT tblArticolo.CodiceInterno, tblArticolo.Misura FROM tblOrdArt INNER JOIN tblArticolo ON tblOrdArt.IDArticolo=tblArticolo.IDArticolo WHERE IDOrdine=" + textBox3.Text;), ----> textbox3.text ----> non funziona, e nella textbox3 prima ho effettuato il databinding -----> txtBox3.DataBindings.Add("Text", bsDatabase, "Commenti");

Jeremy Profilo | Guru

>eseguo una query (string query = "SELECT tblArticolo.CodiceInterno,
>tblArticolo.Misura FROM tblOrdArt INNER JOIN tblArticolo ON tblOrdArt.IDArticolo=tblArticolo.IDArticolo
>WHERE IDOrdine=" + textBox3.Text;), ----> textbox3.text ---->
>non funziona, e nella textbox3 prima ho effettuato il databinding
>-----> txtBox3.DataBindings.Add("Text", bsDatabase, "Commenti");

Il problema stà probabilmente nell'impostazione della tua query...
1° Non usare "+" per concatenare le stringhe
2° Usa le stringhe parametrizzate e risolverai tutti i tuoi problemi

Se ha bisogno un'aiuto su come fare .....sono qui!!!

fabi2089 Profilo | Junior Member

cosa intendi per stringa parametrizzata??? grazie mille...

Jeremy Profilo | Guru

>cosa intendi per stringa parametrizzata??? grazie mille...

Intendo dire che, costruire stringhe sql, usando la concatenzazione delle stringhe, porta sempre ad avere grossi problemi, sopratutto se sono stringhe piuttosto complesse.
Quindi è più pratico parametrizzarle
Per esempio
una stringa semplice di questo tipo:
SELECT * FROM TABLE WHERE Campo1='testo'
potrebbe diventare
SELECT * FROM TABLE WHERE Campo1=@testo
senza preoccuparti di che tipo sia il campo 1(per il momento)

dopo assegni la stringa al command al quale assegni i parametri.

Dim objCmd As New OleDb.OleDbCommand
objCmd.Connection = Conn
objCmd.CommandText = SqlString
par = New OleDb.OleDbParameter With { .ParameterName = @testo, .DbType = dbtype.int32, .Value = cInt(textbox.text)}
objCmd.Parameters.Add(par)

Dim da As New Data.OleDb.OleDbDataAdapter(objCmd)
da.Fill(ds, TableName)


In questo modo hai creato una stringa Sql con un parametro @Testo , successivamente hai creato un parametro per assegnarlo al command.
Il dataadapter fa il resto del lavoro.

Attenzione però.....i parametri vanno aggiunti al command nello stesso ordine della posizione nella query(nel caso in cui ne avessi più di uno).

Rimango a disposizione per ulteriori chiarimenti e/o esempi.

Ciao


fabi2089 Profilo | Junior Member

il problema è che la stringa è sempre vuota... nel debug.. se verifico la text è vuota anche se all'interno dell text quando visualizzo il form la text è piena..

Jeremy Profilo | Guru

Che tipo di eccezione ti restituisce?????
Posta il tipo e, se possibile, il messaggio dell'eccezione.

fabi2089 Profilo | Junior Member

Errore di sintassi (operatore mancante) nell'espressione della query "IDOrdine"

Jeremy Profilo | Guru

Tira via il "+" e mettici la & commerciale(nella query)

Per quanto riguarda invece la proprietà Text della Textbox.....mi sembra strano, però, per verificare se effettivamente è come dici tu puoi fare questa prova:

Prima di usare la proprietà Text nella query, mettici una messagebox che ti visualizza, appunto, la proprietà Text che stai per utilizzare, in modo da capire se effettivamente è vuota.

fabi2089 Profilo | Junior Member

ma la text mi risulta proprio vuota.. nella messagebox.. mi esce un messagio vuoto

Jeremy Profilo | Guru

Allora vuol dire che la leggi prima che il binding le assegni un valore...

Prova a postare un po più di codice....vediamo di trovare subito l'inghippo.

Nel frattempo prova così(io non ho modo di provare):

MessageBox.Show(txtCap.DataBindings.Item("Text").ToString)

fabi2089 Profilo | Junior Member

txtID.DataBindings.Item("Text").ToString non mi prende item... non esiste tra i metodi

Jeremy Profilo | Guru

Invece di fare txtBox3.DataBindings.Add("Text", bsDatabase, "Commenti")

fai txtBox3.text=directcast(bsDatabase.current,Datarowview).Rows("NomeDelCampo").tostring
e poi usi la proprietà Text del txtBox3

fabi2089 Profilo | Junior Member

non va.. non so.. ho provato di tutto

Jeremy Profilo | Guru

posta un pò di codice in più!!!!
Non può non andare!!!

fabi2089 Profilo | Junior Member

//popolo il dataset tramite il database selezionato
strconn = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data source=" + varibiliglobali.Globals.percorso.ToString();
OleDbConnection myConn = new OleDbConnection(strconn);
query = "SELECT IDOrdine, Data, Commenti, Stato, UVS FROM tblOrdine";
OleDbDataAdapter myda = new OleDbDataAdapter(query, myConn);
myda.Fill(dataSetDatabase, "tblOrdine");

//creo il bindingsource
bsDatabase = new BindingSource(dataSetDatabase, "tblOrdine");
bindingNavigatorDatabase.BindingSource = bsDatabase;
txtID.DataBindings.Add("Text", bsDatabase, "IDOrdine")




.... e poi eseguo la funzione aggiorna()

string query = "SELECT tblArticolo.CodiceInterno, tblArticolo.Misura FROM tblOrdArt INNER JOIN tblArticolo ON _tblOrdArt.IDArticolo=tblArticolo.IDArticolo WHERE IDOrdine=" + txtID.Text;
DataSet ds = new DataSet();
OleDbCommand cmd = new OleDbCommand(query, myConn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(ds, "tblArticolo");

ecc ecc



Jeremy Profilo | Guru

Prova così, questo dovrebbe essere l'equivalente del DirectCast di vb in c

DataRowView drw = (DataRowView) bsDatabase.Current;
Txtbox3.Text = (string)drw["Commenti"];

Io non l'ho capito....ma tu neanche l'hai specificato che parlavamo di c ....... non vb

fabi2089 Profilo | Junior Member

grazie mille... davvero tanto... finalmente va... scusa per tutto il disturbo ma sono un principiante con c#.. non lo conosco a fondo..

Jeremy Profilo | Guru

Figurati....è solo che continuavo a darti istruzioni in vb anziche c#....tutto lì

Comunque....pensaci all'uso dei parametri, ti risolvi un mucchio di grane!!!

Ciao
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