Estrazione Variabile da Metodo

martedì 09 settembre 2008 - 17.58

mammamia Profilo | Newbie

Prima di tutto grazie dell'aiuto che spesso mi date alle mie domande!

Vorrei capire questo concetto che mi rimane complicato in C#:

Sto facendo delle prove in una WinForm con Visual Studio 2008, caricando una DataGridView con la tabella Clienti del database Northwind di Access. Il mio scopo è quello di creare un filtro per trovare dei dati al'interno di questo database.

Il mio "progetto" è composto sostanzialmente così come segue:

- Nell'evento 'Form_Load' ho creato la connessione con il database e popolato la 'DataGridView'

- Nell' Evento 'DataGridView_ColumnHeaderMouseClick' ho scritto del codice per estrapolare il nome della colonna selezionata, inserendo questo valore in una variabile 'NomeColonna' per poi essere visualizzata in una label.

- Nell' Evento 'Button_Click' invece, prendo da una TextBox i dati immessi dall'utente per filtrare il contenuto della colonna che ho precedentemente selezionato (quindi il valore della variabile 'NomeColonna').

Questo è lo Screen della mia applicazione, per capire visivamente com'è impostata:

950x340 73Kb


Ora la domanda fatidica

Le informazioni contenute in 'NomeColonna' oppure quelle contenute nell'evento Form_Load, come posso renderle disponibili all'interno di altri eventi per poterle utilizzare come voglio?
Ho trovato delle procedure abbastanza lunghe ma vorrei capire il concetto che sta dietro a questa cosa.
Tutto questo poi dovrebbe essere quello che identifica C# un linguaggio totalmente orientato agli oggetti.

Grazie in anticipo

schifidus Profilo | Junior Member

Bhe credo che a te serva qualcosa in più che rendere una variabile visibile in "diversti eventi",
Comunque per rispondere a quello che tu chiedi è sufficiente che tu dichiari una variabile globale nella tua classe Fomr1 ed hai accesso ad essa da qualsiasi metodo della classe.
Marco Farina
MCTS .NET Framework 2.0 Web Applications
MCPD Web Applications

mammamia Profilo | Newbie

Secondo te la modalità migliore, come logica, è quella di creare una classe 'public static' in cui definisco le variabili che devo utilizzare tra le diverse parti del mio programma?

Puoi indicarmi qualche link dove reperire un'esempio? Ho in mente VB.NET dove le variabili vengono definite in un'area apposita, quindi mi trovo un po confuso su questo argomento.

Grazie ancora

schifidus Profilo | Junior Member

Beh dipende dal contesto..
Ricorda che una classe statica è condivisa da tutta l'applicazione quindi ti può creare problemi di concorrenzialità. Nel tuo caso è sufficiente dicharare proprietà nella classe principale con modificatore public se le vuoi rendere accessibili all'esterno.
Marco Farina
MCTS .NET Framework 2.0 Web Applications
MCPD Web Applications

mammamia Profilo | Newbie

Oramai ci sono e continuo a chiedere (per cercare di capire )


Questo è l'evento relativo alla selezione della colonna, dove prendo il nome della colonna selezionata:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Questo invece è l'evento click del bottone filtro:

private void btnFiltra_Click(object sender, EventArgs e) { string Filtro = txtRicerca.Text; DataView dv = new DataView(); //v.RowFilter = "WHERE " + NomeColonna + "LIKE '%" + Filtro + "%'"; }

Ora la mia domanda è la seguente:
La variabile stringa 'NomeColonna' che ho creato nel primo evento, come faccio a utilizzarla nel secondo evento? Ma in assoluto come vengono gestiti questi dati che molto spesso devono essere riutilizzati all'interno di tutto il programma? Nel mio caso ho solo una variabile, ma può capitare che in un progetto ce ne siano molte altre, allora come vengono rese pubbliche?

Per favore fatemi un'esempio di codice altrimenti non ci trovo più la strada.

schifidus Profilo | Junior Member

mmm
forse dovresti approfondire un attimo le logiche di programmazione,
se tu definisci una variabile all'interno di un metodo il suo scope è quello.. conscluso il metodo la variabile cessa d'esistere...
Deinisci una variabile nella classe Form1 e poi la usi in tutti e due i metodi...
sarà una cosa del genere.
public class Form1:Form
{
private string nomeColonna= string.empty;

public void dgvTabella_ColumnHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
nomeColonna = dgvTabella.Columns[e.ColumnIndex].HeaderText.ToString();
}

private void btnFiltra_Click(object sender, EventArgs e)
{
string Filtro = txtRicerca.Text;
DataView dv = new DataView();
//v.RowFilter = "WHERE " + nomeColonna+ "LIKE '%" + Filtro +
"%'";
}
}

Io ho risposto solo alla tua domanda... ma ci sono molte cose negli snippet che hai postato che non vanno molto bene...
Ciao Marco.

Marco Farina
MCTS .NET Framework 2.0 Web Applications
MCPD Web Applications

mammamia Profilo | Newbie

Prima di tutto grazie delle risposte.

Come soluzione era quella che ho già utilizzato per proseguire nel programma, ma la consideravo "poco pulita" però se alla fine è quella più pratica me la prendo così come viene

Certo comunque che per aver postato quattro righe di codice e beccarmi la tua osservazione:
"ma ci sono molte cose negli snippet che hai postato che non vanno molto bene..."
Comunque sono in fase di studio di questo interessante linguaggio spero di rimediare agli errori in un futuro non troppo lontano


Grazie ancora

schifidus Profilo | Junior Member

poco pulita.. un campo di una classe è la cosa + pulita che possa esserci fidati
Buono studio allora.
Ciao e chiudi il post.
Marco Farina
MCTS .NET Framework 2.0 Web Applications
MCPD Web Applications
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5