Sapete dove posso trovare l'esempio di un array che si "riepie" con i dati di un db.
Sonia
Sapete dove posso trovare l'esempio di un array che si "riepie" con i dati di un db.
Sonia
Non credo di aver capito bene la domanda, cmq i dati di un db solitamente sono in un array (es. datareader o datatable). Quindi non ti rimarrebbe che ciclare su un array per riempirne un altro es. di una datatable che finisce in un generico arraylist
codice:Dim nuovoArray As New ArrayList For Each _dr As DataRow In tuadatatable.Rows nuovoArray.Add(_dr("nomecolonna")) Next
Saluti a tutti
Riccardo
Allora io carico dei dati in un datalist e ho la necessità di salvarmi gli id di questo datalist in una variabilie di sessione (il fatto di salvarli in una variabile di sessioene per il momento si può accontonare mi accontento di stamparli)
io ho fatto così:
al page load lancio la funzione ch eriempie il mio DataList1 (access è una mia classe che mi restituisce il risultato della query)
public void CollegaGriglia()
{
ArrayList nuovoArray = new ArrayList();
// CON FW 2.0 METTO SELECTEDVALUE
string sql = "Select * from schizzi ORDER BY nome ASC";
DataList1.DataSource = Access.visRecord4(sql);
foreach (DataRow _dr in DataTable.Row)
{
nuovoArray.Add(_dr("idschizzo"));
}
DataList1.DataBind();
}
Però il mio compilatore non concorda molto
'System.Web.UI.WebControls.DataList' does not contain a definition for 'Rows'
'_dr' is a 'variable' but is used like a 'method'
VVoVe: arghhh....
c'e' un cincinino di confusione nel codice![]()
.
Poi non so se lo hai riportato preciso preciso. Cmq, ad es.
e' sbagliato. Nel codice che hai riportato non vedo nessun oggetto (di tipo datatable) chiamato DataTable. Perdipiu', anche se ci fosse non sarebbe una grande idea chiamare una istanza di tipo DataTable con lo stesso nome del suo tipo (es. DataTable appunto). In piu', la collection di datarow della classe DataTable si chiama Rows e non Row. Quindiforeach (DataRow _dr in DataTable.Row)
andrebbe gia meglio. Che cosa restituiscecodice:foreach (DataRow _dr in unatuadatatable.Rows)
?Access.visRecord4(sql);
Perche' dopo aver assegnato il risultato della funzione alla datalist non chiami subito il suo databind?
Saluti a tutti
Riccardo
Dando una risposta in senso stretto, in base alla domanda la risposta esatta è la prima di riccardoneOriginariamente inviato da Sonikag
Sapete dove posso trovare l'esempio di un array che si "riepie" con i dati di un db.
Sonia![]()
oppure, ma è lo stesso:
1) recupero la dimensione del vettore
2) dimensiono il vettore
3) in un ciclo su un datareader riempio il vettore
E notare bene, in base alla domanda, che non c'entra niente datalist, datagrid o simili![]()
![]()
Pietro
allora parto dal fondo.
Access.VisRecord4 restituisce proprio una datatable:
Ho corretto il mio codice così:codice:public static DataTable visRecord4 (string SQL) { SqlConnection conn = new SqlConnection(connString); conn.Open(); SqlCommand comm = new SqlCommand(SQL ,conn); SqlDataAdapter DA = new SqlDataAdapter(comm); DataTable MyTable = new DataTable(); DA.Fill(MyTable); conn.Close(); return MyTable; }
però quando faccio nuovoArray.Add(_dr... mi dice che '_dr' is a 'variable' but is used like a 'method'codice:string sql = "Select * from schizzi ORDER BY nomeschizzo ASC"; DataList1.DataSource = Access.visRecord4(sql); DataList1.DataBind(); ArrayList nuovoArray = new ArrayList(); DataTable MyTable2 = new DataTable(); foreach (DataRow _dr in MyTable2.Rows) { nuovoArray.Add(_dr("idschizzo")); }
---
Per rispondere a Pietro nel mio caso non so anticipatamente quanto è la dimensione del vettore.
Diciamo che con la query sopra devo Riepire un datalist e riempire un array con gli id.
Sonia
allora, se vuoi puoi correggere gia che ci siamo la funzione visrecord cosi (p.s. il nome di una funzione dovrebbe nei limiti del possibile far capire a chi la usa a cosa serve quindi perche' non la chiami ad esempio GetDataTable?)
il resto del codice ha 2 errori abbastanza evidenti.codice:public static DataTable VisRecord4 (string SQL) { SqlDataAdapter da = new SqlDataAdapter(SQL, connString); DataTable myTable = new DataTable(); da.Fill(myTable); return myTable; }
1. Crei inutilmente una datatable nuova (datatable2) e quindi vuota per poi ciclare sui suoi record (che non esistono).
2. Usi c# e quindi l'errore e' nel cercare di accedere ad una proprieta' dell'oggetto con le parentesi tonde al posto delle quadre
codice:string sql = "Select * from schizzi ORDER BY nomeschizzo ASC"; DataTable MyTable2 = Access.visRecord4(sql); DataList1.DataSource = MyTable2; DataList1.DataBind(); ArrayList nuovoArray = new ArrayList(); foreach (DataRow _dr in MyTable2.Rows) { nuovoArray.Add(_dr["idschizzo"]); }Le datatable (cosi come in genere tutti gli array) hanno delle comode funzioni che dicono di quante righe sono composte es. tuadatatable.rows.countPer rispondere a Pietro nel mio caso non so anticipatamente quanto è la dimensione del vettore.
Saluti a tutti
Riccardo
Grazie rick... ultima cosa... come lo posso mettere in stampa? (così controllo se i dati sono giusti)
Ciao
Sonia
codice:tuanuovadatagridpresentesulform.datasource = nuovoarray tuanuovadatagridpresentesulform.databind
Saluti a tutti
Riccardo
Grazie rick
Il dg dal lato "html" come lo imposto? Non ho mai riempito dg da array.
<aspataGrid ID="rep1" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "COME CHIAMO IL SINGOLO VALORE???")%>
</ItemTemplate>
</aspataGrid >
---
Se è troppo laborioso mi basta un response.write, mi serve solo per vedere i dati che vanno scritti nell'array.