Avatar billede hanzi_cool Nybegynder
29. juni 2003 - 00:46 Der 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 :)

På forhånd tak for hjælpen
Avatar billede odegaard Nybegynder
29. juni 2003 - 01:50 #1
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...
Avatar billede alradk Nybegynder
30. juni 2003 - 13:39 #2
Du kan oprette et modul, og ligge dit dataset der.
ex. Public ds As dataset

Alle andre forms i dit projekt vil derefter kunne se dit dataset, og fill data i eller update, hvis de har lyst til det.

/A :-)
Avatar billede odegaard Nybegynder
30. juni 2003 - 14:07 #3
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).
Avatar billede odegaard Nybegynder
30. juni 2003 - 14:08 #4
Alradk: Nu er jeg efterhånden gået helt over til C#, men er der stadig noget der hedder moduler i VB.NET? Er det ikke en VB6 ting?
Avatar billede odegaard Nybegynder
30. juni 2003 - 14:12 #5
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).
Avatar billede hanzi_cool Nybegynder
30. juni 2003 - 14:20 #6
Super lækkert... det ser ud til at virker :)
Avatar billede burningice Nybegynder
13. juli 2003 - 20:48 #7
umiddelbart ville jeg have lavet det ved af en ny klasse man lavede til singleton (den her er med lazy initialisering):

public class GlobaleData {
  public DataSet ds;
  private static GlobaleData gd;

  private GlobaleData() {
      ds = new DataSet();
  }

  public GlobaleData Instance {
      get {
        if (gd == null) {
            gd = new GlobaleData();
        }
       
        return gd;
      }
  }
}


når man så skal bruge det dataset skriver man, ligemeget hvor man er henne,

GlobaleData gd = GlobaleData.Instance;
DataSet ds = gd.ds;
Avatar billede burningice Nybegynder
13. juli 2003 - 20:50 #8
public GlobaleData Instance  skal selvfølgelig være static:

public static GlobaleData Instance
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester