29. juni 2003 - 00:46Der er
6 kommentarer og 2 løsninger
Globalt data i windows forms
Jeg er igang med at lave program der, fra flere forskellige forms, skal kunne skrive og læse data fra det samme dataset.
Jeg har f.eks. en form med et datagrid, hvor man kan redigere i katagorier, og en anden form hvor man kan indtaste underkategorier. Underkategorierne er har en foreign key, så hver gang man tilføjer en underkategori, tildeler man den så en kategori, der ved hjælp af ForeignKeyConstraint tjekker om kategorien eksistere.
Problemmet er så at hver jeg ikke ved hvor eller hvordan jeg kan sørge for kun at skulle "Fill'e" dataset'et med data fra en dataadapter én gang, og så kunne bruge den data i alle mine forms, uden at skulle "Fill'e" hver kan jeg loader en form.
Jeg ved godt det var en lang smører, men jeg håber der er nogen der ude der kan fatte hvad jeg snakker om :)
Du kan smide dit dataset med hovedkategorier i dit cache, og så genbruge dette. Dit objekt/dataset kan således automatisk reloades når du mener det skal udløbe. Fx. hver time, døgn eller...
Imellemtiden er jeg blevet lidt klogere. Her er hvordan jeg gør: Jeg har en basis-klasse som starter hele applikationen. Denne instantantierer alle forms der skal benyttes, sammen med en række globale variabler. Basis-klassen er således ikke selv en form, men parent til alle andre objekter.
På denne måde kan jeg få adgang til alle data og forms via min basis-klasse , på tværs af mine forms (forudsat at de er erklæret public selvfølgelig).
Hanzi: Noget i denne stil. public class BaseClass { public static MainForm frm; public DataSet GlobalData;
static int Main(string[] args) { frm = new MainForm(); Base = new BaseClass(); Application.Run(frm); //Kørt start-up form return 0; } public BaseClass() { GlobalData = new DataSet(); } } ------------ Nu kan du altid få fat i fx. GlobalData via BaseClass.Base.GlobalData eller din form via BaseClass.frm, uanset hvor du befinder dig (bortset fra hvis der er i en anden thread-pool).
public GlobaleData Instance skal selvfølgelig være static:
public static GlobaleData Instance
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.