Avatar billede Syska Mester
26. september 2004 - 13:23 Der er 13 kommentarer og
1 løsning

Opbygning af program

FFS lorte comp, havde skrevet en masse, og så kommer man til at trykke tilbage FLOT af mig, vi prøver igen.

Jeg ved ikke helt hvordan det skal bygges op på den mest professionelle, og nemmeste måde

Jeg vil gerne have sådan at efter man har oprettet en ny poll så skal listen selvf også opdateres, altså listPolls, som er en "listbox" control. Men hvor skal jeg smide det DataSet, som det er nu kan jeg ikke tilgå det fra andre knapper eller noget.
Hvordan skal det sættes op? sådan at jeg jeg bruger min button1_Click, at den også henter tingene igen fra databasen da der jo er blevet indsat noget i den, eller hvordan ville I lave det?

Jeg er ny til C#, så derfor kan det godt virke som om det her er meget nemt for jer, men vi har vel alle være nye engang :-P

Men her er min kode som er relavant for jer, jeg har ikke tage koden med til min overordnet Class samt oprettelse af Controls, da det jo giver sig selv.


static void Main()
        {
            Application.Run(new Form1());
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            MySqlConnection conn = new MySqlConnection("server=xxx;database=c-sharp;User id=xxx;password=xxx");

            MySqlDataAdapter thisAdapter = new MySqlDataAdapter("SELECT * FROM poll", conn);

            DataSet thisDataSet = new DataSet();

            thisAdapter.Fill(thisDataSet, "polls");

            listPolls.DataSource = thisDataSet.Tables["polls"];
            listPolls.DisplayMember = "pollQuestion";
            listPolls.ValueMember = "pollId";

            pollId.Text = listPolls.SelectedValue.ToString();
        }

        private void listPolls_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            pollId.Text = listPolls.SelectedValue.ToString();
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            MySqlConnection conn = new MySqlConnection("server=xxx;database=c-sharp;User id=xxx;password=xxx");
           
            conn.Open();

            MySqlCommand thisUpdate = new MySqlCommand("INSERT INTO poll (pollQuestion) VALUES ('test') ", conn);
           
            thisUpdate.ExecuteNonQuery();
           
            conn.Close();
           
        }

Der skulle vist ikke være mere nu, så det eneste jeg kan sige er, kom frisk.

// Go'e weekend til den lille del af den, der stadig er tilbage
Avatar billede snepnet Nybegynder
26. september 2004 - 21:02 #1
du kan bare lægge det op som en klassevariabel... altså lige under din

public class SomeClass
{
  protected DataSet thisDataSet; 
}

og så skifte din

DataSet thisDataSet = new DataSet();

ud med

thisDataSet = new DataSet();
Avatar billede Syska Mester
27. september 2004 - 23:32 #2
ahhh, nu fik jeg fat i hvad du mente :-P

Har nu heller ikke kigget så meget på det.....

Men overskriver den så ikke mit DataSet hver gang min function/Click Event bliver kaldt?
Avatar billede Syska Mester
27. september 2004 - 23:34 #3
og igen, ville man så også bare smide min MySqlConnection samme sted og så tildele den en værdi under Form1_Load? Det er jo samme database jeg skal bruge det hele programmet?
Avatar billede snepnet Nybegynder
28. september 2004 - 08:36 #4
hej igen :o)

du kan lave et system som dette... så sikrer du dig det nødvendige datagrundlag når forman loades, og så benytter du bare en adapter til at opdatere efterfølgende.
datasættet indeholder altid dine aktuelle data, og ved passende lejligheder kan du så kalde update.
(jeg har bare indskrevet både din select og din connectionstring - og den sidste skal nok lige passes lidt til :o)

using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

using ByteFX.Data.MySqlClient;

namespace Exp2WinClient
{
    public class buzzz : System.Windows.Forms.Form
    {
        private System.ComponentModel.Container components = null;
        private DataSet data;
        private MySqlConnection connection;
        private MySqlDataAdapter adapter;
        private MySqlCommand command;
        private MySqlCommandBuilder commandBuilder;

        public buzzz()
        {
            InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        [STAThread]
        static void Main()
        {
            Application.Run(new buzzz());
        }

        private void InitializeComponent()
        {
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(560, 357);
            this.Name = "buzzz";
            this.Text = "buzzz";
            this.Load += new System.EventHandler(this.buzzz_Load);
        }

        // kaldes én gang lige inden formen åbnes
        private void buzzz_Load(object sender, System.EventArgs e)
        {
            InitData();
        }

        // til at updatere data når man synes det passer.
        private void UpdateData()
        {
            adapter.Update(data);
        }

        // til at hente de data der skal arbejdes med.
        private void InitData()
        {
            connection = new MySqlConnection("server=xxx;database=c-sharp;User id=xxx;password=xxx");
            command = new MySqlCommand("SELECT * FROM poll");
            adapter = new MySqlDataAdapter(command);
            commandBuilder = new MySqlCommandBuilder(adapter);
            data = new DataSet("someData");
            adapter.Fill(data);
        }
    }
}

Udover det, ville det nok være en god idé, hvis du sørger for at lægge din connectionstring et sted hvor den kan ændres "udefra"... f.eks. i din konfigurationsfil.

desuden kan du jo på et tidspunkt overveje at lægge dataadgangen i en klasse for sig, og stille og roligt begynde at arbejde hen imod et datalag som ikke er blandet ind i dine forms.

mvh
Avatar billede Syska Mester
28. september 2004 - 09:00 #5
Jeg vil kigge på det, så kan jeg jo eventuelt poste det nye jeg får lavet.....

smider ud et svar?
Avatar billede snepnet Nybegynder
28. september 2004 - 10:20 #6
ok :o)

du smider bare noget ud når du gerne vil have kommentarer.

mvh
Avatar billede snepnet Nybegynder
28. september 2004 - 10:21 #7
(æhh... altså ikke ude - men herud :o)
Avatar billede Syska Mester
28. september 2004 - 10:42 #8
hehe, ja, jeg ville da ikke kåbe at du kiggede i min papirkurn på computeren, når jeg smed noget _UD_ *heheh*

men C# er jo et dejligt sprog når man lige magter at lave det.

har du eventuelt nogle links til opbygning af datalag etc. som du snakker om...

Har hørt noget om 3 lag, Datalag, Applikationlag, og process lag tror jeg nok det var, er ikke så sikker på det, er næsten lige startet...

Kan du anbefale nogen bøger, er ved at være igennem det meste af "Beginning Visual C#" fra Wrox, men kan godt se at den ikke går så meget i bybden som jeg nok gerne ville have, er der anden bog "Professional Visual C#" noget ved hvis du da kender den, eller kan du anbefale en helt anden bog....

// hygge
Avatar billede arne_v Ekspert
28. september 2004 - 10:43 #9
Wrox har en "Professional C#"
Avatar billede snepnet Nybegynder
28. september 2004 - 10:49 #10
og det her er et rigtig godt sted at bladre sig frem til diverse guidelines... der er er ret digre værker man kan downloade.

http://msdn.microsoft.com/architecture/
Avatar billede snepnet Nybegynder
28. september 2004 - 10:49 #11
og helt generelt er msdn.microsoft.com i denne her forbindelse :o)
Avatar billede Syska Mester
28. september 2004 - 10:50 #12
jeps Arne, var også den jeg tænkte på, er det den bedste eller findes der bedre?
Avatar billede arne_v Ekspert
28. september 2004 - 11:02 #13
Jeg ved at flere (inkl. mig selv) er glade for den
Avatar billede Syska Mester
28. september 2004 - 11:18 #14
hvis du er, så er det helt klart den bog jeg skal have, da du jo kan nogle triks inden for C#, og andre sprog :-P
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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