Avatar billede simsen Mester
23. august 2012 - 00:18 Der er 4 kommentarer og
1 løsning

Tilføj klasse til Project Data Sources

Igen sikkert helt simpelt spørgsmål - men jeg kan ikke hitte ud af'et lige nu :-)

Jeg er kommet så langt i min bingo projekt, at jeg har lavet mig en klasse Cards, den skal jeg nu have tilføjet til projektets data source. Dette aner jeg så ikke hvordan man gør - jeg har altid brugt databaser.

Det han konkret skriver er følgende:

•Add the Card class to Project Data Sources.
•Associate the dataCardView control with the Card data source. (jeg har lavet et gridview til dataCardView)

Jeg har lavet klssen Card i samme projekt som selve programmet, hvis det er en info I skal bruge til noget.

Men konkret, hvordan får jeg tilføjet klassen så den automatisk genererer bingo tallene?

mvh
simsen :-)
Avatar billede Syska Mester
23. august 2012 - 00:45 #1
Tror der mangler en del kontekst ... hvad guide følger du?

Men det er måske en ObjectDataSource der beskrives.
Avatar billede simsen Mester
23. august 2012 - 10:31 #2
Hej buzzzz

Det jeg følger er nedenviste link:

http://ism3232.coba.usf.edu/Module3/Assignment03-01/index.html

Det er næsten helt mod slutningen - jeg har lavet de 3 klasser og smidt et DataGridView på min form - nu mangler jeg så at koble det jeg har lavet i Card klassen sammen med DataGridViewet.
Avatar billede simsen Mester
23. august 2012 - 11:12 #3
Jeg tror så ikke længere det er i bindingen den er galt men et eller andet i koden, når jeg genererer kortet. Den skriver nemlig 0 i alle felter undtagen den midterste.

Og det er i GenerateCard (jeg tror) den gør noget forkert. Mere specifikt i loopet hvor jeg genererer værdierne i en for loop:

//Generating column values
            for (int nC = 0; nC < 5; nC++)
            {
                Cell[] col = GenerateCol(rand);
                for (int nR = 0; nR < 5; nR++)
                {
                    col[nR].Value = nC * 15 + col[nR].Value;
                    //Her fjernes tallet i midten
                    if (nC == 2 && nR == 2)
                    {
                        this[nC, nR] = new Cell(0);
                    }
                    else
                    {
                        this[nC, nR] = col[nR];
                    }
                }
            }

Men jeg kan altså ikke gennemskue, hvorfor den ikke henter værdierne ind?
Avatar billede simsen Mester
23. august 2012 - 20:47 #4
Jeg har fundet ud af følgende (men ved stadig ikke hvorfor)
void GenerateCard(int seed)
        {
            Random rand = new Random(seed);
            Row[] rows = new Row[5];
            for (int i = 0; i < 5; i++)
            {
                rows[i] = new Row();
            }

            AddRange(rows);

            //Generating column values
            for (int nC = 0; nC < 5; nC++)
            {
                Cell[] col = GenerateCol(rand); //værdi 7 for kolonne 0
                for (int nR = 0; nR < 5; nR++)
                {
                    col[nR].Value = (nC * 15) + col[nR].Value; //col[nR].Value har værdien 7

                    this[nC, nR] = col[nR]; //nC = 0 nR = 0

                    string test = string.Empty;
                }
            }
        }

Som I kan se så har col værdien 7 for kolonne 0 og nu går jeg så ind i for løkken for at smide den korrekt på plads

col[nR].Value har værdien 7 men når jeg så når til næste linje får den værdien 0 - og det er det jeg slet og ret ikke fatter.

Jeg smider lige koden for hele Card og håber I gider hjælpe :-)

public class Card : List<Row>
    {
        //Two-element indexer access to cell values within the card
        Cell this[int col, int row]
        {
            get
            {
                if (row >= 5 || row < 0)
                {
                    throw new Exception("Invalid row column combination");
                }
                return this[row][col];
            }
            set
            {
                if (row >= 5 || row < 0)
                {
                    throw new Exception("Invalid row column combination");
                }
                this[row][col] = value;
            }
        }
        Cell this[string letter, int row]
        {
            get
            {
                if (row >= 5 || row < 0)
                {
                    throw new Exception("Invalid row column combination");
                }
                return this[row][letter];
            }
            set
            {
                if (row >= 5 || row < 0)
                {
                    throw new Exception("Invalid row column combination");
                }
                this[row][letter] = value;
            }
        }
        //Constructor variations
        public Card()
        {
            Random rand = new Random();
            GenerateCard(rand.Next());
        }
        public Card(int seed)
        {
            GenerateCard(seed);
        }
        public Card(string key)
        {
            int seed = key.GetHashCode();
            GenerateCard(seed);
        }

        static Cell[] GenerateCol(Random rand)
        {
            Cell[] col = new Cell[5];
            List<int> available = new List<int>();

            //Create an array with elements 1 through 15
            for (int i = 1; i <= 15; i++)
            {
                available.Add(i);
            }
            for (int i = 0; i < 5; i++)
            {
                int Max = available.Count;
                int coeff = rand.Next(Max);
                col[i] = new Cell(available[coeff]);
                available.RemoveAt(coeff);
            }

            return col;
        }

        void GenerateCard(int seed)
        {
            Random rand = new Random(seed);
            Row[] rows = new Row[5];
            for (int i = 0; i < 5; i++)
            {
                rows[i] = new Row();
            }

            AddRange(rows);

            //Generating column values
            for (int nC = 0; nC < 5; nC++)
            {
                Cell[] col = GenerateCol(rand); //værdi 7 for kolonne 0
                for (int nR = 0; nR < 5; nR++)
                {
                    col[nR].Value = (nC * 15) + col[nR].Value; //col[nR].Value har værdien 7

                    this[nC, nR] = col[nR]; //nC = 0 nR = 0

                    string test = string.Empty;
                }
            }
        }

        public bool Call(int nVal)
        {
            int Col = (nVal - 1) / 15;
            for (int i = 0; i < 5; i++)
            {
                Cell cell = this[Col, i];
                if (cell.Value == nVal)
                {
                    cell.Selected = true;
                    return true;
                }
            }
            return false;
        }

        public bool Select(int col, int row)
        {
            if (row == 2 && col == 2)
            {
                return true; //Can't change free cell
            }
            Cell c = this[col, row];
            c.Selected = !c.Selected;
            return c.Selected;
        }

        public bool Bingo()
        {
            //Test for rows
            for (int row = 0; row < 5; row++)
            {
                int col;
                for (col = 0; col < 5; col++)
                {
                    if (!this[col, row].Selected)
                        break;
                }
                if (col == 5)
                {
                    return true;
                }
            }

            //Test for columns
            for (int col = 0; col < 5; col++)
            {
                int row;
                for (row = 0; row < 5; row++)
                {
                    if (!this[col, row].Selected)
                        break;
                }
                if (row == 5) return true;
            }

            //Test for backslash diagonal //Ændres til loop
            if (this[0,0].Selected && this[1,1].Selected && this[3,3].Selected && this[4,4].Selected)
            {
                return true;
            }

            //Test for slash diagonal  //Ændres til loop
            if (this[0, 4].Selected && this[1, 3].Selected && this[3, 1].Selected && this[4, 0].Selected)
            {
                return true;
            }

            return false;
        }
    }
Avatar billede simsen Mester
14. september 2012 - 13:18 #5
Lukker - fandt aldrig ud af det :-)
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