Caricare Datagrid da Dll

lunedì 12 aprile 2010 - 15.38

lexen Profilo | Newbie

Salve,
vorrei riuscire a caricare il datagrid che ho su una form tramite l'istanza di un oggetto esterno da me creato che non fa altro che colellarsi al database sql,estrarre i record da una tabella ed associarl al datagrid.
Il metodo ritorna come valore proprio l'oggetto datagrid.
Ho provato ma il datagrid sulla form non viene caricato.

Ecco il codice della dll esterna:

public DataGridView Carica_Datagrid(String sql)
{
DataGridView DG_esempio= new DataGridView();
SqlConnessione = new SqlConnection(this.ConnectionString);
SqlConnessione.Open();
SqlCommand = new SqlCommand();
SqlCommand.Connection = SqlConnessione;
SqlCommand.CommandType = CommandType.Text;
SqlCommand.CommandText = sql ;
SqlDataset = new DataSet();
SqlAdapter = new SqlDataAdapter(SqlCommand);
SqlAdapter.Fill(SqlDataset, "app");
DG_esempio.DataSource = SqlDataset;
DG_esempio.DataMember = "app";
DG_esempio.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
return DG_esempio;
}


nella mia form eseguo la seguente istruzione
dgvArticoli.DataSource = connessione.Carica_Datagrid("select * from articoli")


grazie

AntCiar Profilo | Expert

ciao.

Cambia sistema. Usa questo:

public DataTable Carica_Datagrid(String sql)
{
SqlDataAdapter dap = new SqlDataAdapter();
SqlConnessione = new SqlConnection(this.ConnectionString);
SqlConnessione.Open();

dap.SelectCommand = new SqlCommand();
dap.SelectCommand.Connection = SqlConnessione;
dap.SelectCommand.CommandType = CommandType.Text;
dap.SelectCommand.CommandText = sql;

DataTable tabData = new DataTable();
dap.Fill(tabData);
dap.Dispose();
dap = null;

return tabData;
}



Ciao ciao
Cristian Barca

lexen Profilo | Newbie

Funziona grazie mille.
Mi puoi dire la differenza sono curioso.

grazie

AntCiar Profilo | Expert

ciao.

Allora:

public DataGridView Carica_Datagrid(String sql)
{

DataGridView DG_esempio= new DataGridView();
Qui ti dichiaravi una nuova DatagridgridView, cosa che non serve perchè una grid view sta già sulla tua form (= spreco di memoria)

SqlConnessione = new SqlConnection(this.ConnectionString); SqlConnessione.Open();
questa ci sta bene anche se avrei utilizzato una connessione statica in modulo a basso livello in modo da utilizzare sempre la stessa senza doverne creare una ogni volta.


SqlCommand = new SqlCommand(); SqlCommand.Connection = SqlConnessione; SqlCommand.CommandType = CommandType.Text; SqlCommand.CommandText = sql ; SqlDataset = new DataSet(); SqlAdapter = new SqlDataAdapter(SqlCommand); SqlAdapter.Fill(SqlDataset, "app");
Tutto questo è sprecato!!! esempio per farti capire meglio: a te serviva un bigliettino da visita e hai comprato una risma da 500 fogli A3 (non so se rendo l'idea....)


DG_esempio.DataSource = SqlDataset; DG_esempio.DataMember = "app"; DG_esempio.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; return DG_esempio;
qui valorizzavi il datasource della DatagridView dichiarata nella tua funzione e quindi visibile e valida solo qui dentro. Però in questo pezzo di codice avevi usato una cosa giusta: 'DG_esempio.DataSource = SqlDataset e DG_esempio.DataMember = "app"'. Hai valorizzato il DataSource della griglia con un oggetto DataTable. Questo è giustissimo. Dove sbagliavi tu è nell'istruzione che segue ('dgvArticoli.DataSource = connessione.Carica_Datagrid("select * from articoli")') perchè invece di passare al datasource un oggetto dataTable gli passavi una DataGridView. Quello che avevi scritto tu andava pure bene (a parte gli sprechi) fatta eccezione di scrivere questa riga di codice al posto della tua: 'dgvArticoli= connessione.Carica_Datagrid("select * from articoli")'

}

Da come hai scritto il codice penso tu abbia visto quello che scrive in automatico VisualStudio quando tiri dentro al progetto un database. Alle volte però visualStudio aggiunge un sacco di 'zozzerie' inutili. Meglio semplificare le cose così salviamo un po di memoria.


Per correttezza delle politiche del forum ricorda di chiudere il thread accettando una risposta.

Ciao ciao
Cristian Barca
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