Tror der mangler en del kontekst ... hvad guide følger du?
Men det er måske en ObjectDataSource der beskrives.
Hej buzzzz
Det jeg følger er nedenviste link:
http://ism3232.coba.usf.edu/ (...)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;
}
return false;
}
}
Lukker - fandt aldrig ud af det :-)