23. august 2012 - 00:18Der 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?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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.
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?
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; }
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.