login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[C#] Klikbaar grid (Opgelost)

Offline Ultimatum - 28/02/2009 16:30 (laatste wijziging 28/02/2009 16:34)
Avatar van UltimatumPHP expert Ey, ik kwam net een programma tegen dit een grid had en elk vak was aanklikbaar. Is dit mogelijk in C# en zoja hoe dan precies. Hier een screenshot. Is niet heel duidelijk maar je ziet alleen het grid en misschien is het dan duidelijker wat ik bedoel 

http://img187.imageshack.us/img187/2981/cgrid.jpg

21 antwoorden

Gesponsorde links
Offline Abbas - 28/02/2009 20:24
Avatar van Abbas Gouden medaille

Crew .NET
Ben je webbased of desktop bezig? Maar in principe is het mogelijk want er is een event dat wordt opgeroepen telkens je een andere cel aanklikt en dus bepaalde dingen kan uitvoeren. 
Offline Ultimatum - 28/02/2009 20:52
Avatar van Ultimatum PHP expert Desktop, maar hoe kan ik dit maken. Want het lukt me niet .
Offline Abbas - 28/02/2009 21:44 (laatste wijziging 28/02/2009 21:45)
Avatar van Abbas Gouden medaille

Crew .NET
Ok, je maakt een projectje en daarin voeg je een 'New Item' toe: een server-side DB bijvoorbeeld. Je maakt een tabel 'tblLeden' en hier zet je dan wat gegevens in. Daarna maak je een DataSource voor je project en dan open je het kader 'Data Sources'. De DataSource die je net hebt gemaakt sleep je naar je Form, klik dan 1 keer op de DataGridView en ga naar de Event-properties. Hier ga je naar het event CellClick en typ in dat vakje celGeklikt of iets dergelijks. Je gaat naar de code en plaats deze regel in dat event:

  1. MessageBox.Show(tblLedenDataGridView[e.ColumnIndex, e.RowIndex].Value.ToString());

Dit is maar een heel eenvoudig voorbeeld om te laten zien hoe zoiets werkt natuurlijk!  
Offline Ultimatum - 28/02/2009 21:54
Avatar van Ultimatum PHP expert Oke, maar kan ik het dan ook in dezelfde style krijgen als in mijn screenshot en ik moet gewoon een veld van 10 bij 10 generen, dus niets uit db ofzo
Offline Ontani - 02/03/2009 15:37
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Een datagridview moet niet persé aan een datasource gekoppeld zijn. Je kan manueel rijen en kolommen toevoegen. Je kan de rij en kolomhoogtes aanpassen dus perfect een veld van 10x10 genereren.
Offline Ultimatum - 02/03/2009 15:42
Avatar van Ultimatum PHP expert Oke, maar ook zoals in de screenshot want wat ik tot nu toe had geprobeerd dan kreeg je een extra kolom aan de linkerkant met sterretjes en pijltjes enzo. Ik doe het nu met 100 buttons, is er een makkelijkere manier?
Offline Ontani - 02/03/2009 15:44
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Die header aan de linkerkant kan je uitzetten:
datagrid.rowheadersvisible = false
Offline Ultimatum - 02/03/2009 15:46
Avatar van Ultimatum PHP expert Aha wist ik niet, zal het eens even proberen .
Offline Ontani - 02/03/2009 15:55 (laatste wijziging 02/03/2009 16:08)
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Ik ken geen C# maar ik VB.NET krijg ik het zo voor elkaar:

  1. dgview1.Columns.Add("", "", "", "", "", "", "", "", "", "")
  2.  
  3. For Each col As DataGridViewColumn In dgview1.Columns
  4. col.Width = 20
  5. Next
  6.  
  7. For i As Integer = 0 To 9
  8. dgview1.Rows.Add("", "", "", "", "", "", "", "", "", "")
  9. Next
  10.  
  11. For Each row As DataGridViewRow In dgview1.Rows
  12. row.Height = 20
  13. Next
Offline Ultimatum - 02/03/2009 16:06 (laatste wijziging 02/03/2009 16:07)
Avatar van Ultimatum PHP expert Oke bedankt voor je hulp, maar er moet een makkelijkere manier zijn ipv 2x for en 2x foreach. In het weekend had Titjes me geholpen met 100 buttons genereren.
Offline Ontani - 02/03/2009 16:08
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
mijn fout, je moet maar 1x 10 kolommen toevoegen geen 10x.
Offline Ultimatum - 02/03/2009 16:11 (laatste wijziging 05/03/2009 13:55)
Avatar van Ultimatum PHP expert Dat is waar, maar moet het alsnog zo doen:
  1. for (int i = 1; i <= 10; i++)
  2. {
  3. dataGridView1.Columns.Add(i.ToString(), i.ToString());
  4. }

of 10x handmatig kopieren plakken.

Maar zal thuis even kijken hoe ik het daar heb want daar is het geloof ik iets makkelijker maar weet niet zeker.
Hoe kan ik trouwens een eventhandler op elke cell krijgen? Want ik wil weten welk cell is aangeklikt, dus de naam van de aangeklikte cell.

Na veel proberen heb ik dit dus nu bereikt
  1. string[] columns = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
  2.  
  3. dgv.Columns[0].Name = "";
  4. dgv.Columns[0].Width = 25;
  5.  
  6. int i = 1;
  7. foreach (string column in columns)
  8. {
  9. dgv.Columns[i].Name = column;
  10. dgv.Columns[i].Width = 25;
  11. i++;
  12. }
  13.  
  14. dgv.Rows.Add("1", "A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1");
  15. dgv.Rows.Add("2", "A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2", "I2", "J2");
  16. dgv.Rows.Add("3", "A3", "B3", "C3", "D3", "E3", "F3", "G3", "H3", "I3", "J3");
  17. dgv.Rows.Add("4", "A4", "B4", "C4", "D4", "E4", "F4", "G4", "H4", "I4", "J4");
  18. dgv.Rows.Add("5", "A5", "B5", "C5", "D5", "E5", "F5", "G5", "H5", "I5", "J5");
  19. dgv.Rows.Add("6", "A6", "B6", "C6", "D6", "E6", "F6", "G6", "H6", "I6", "J6");
  20. dgv.Rows.Add("7", "A7", "B7", "C7", "D7", "E7", "F7", "G7", "H7", "I7", "J7");
  21. dgv.Rows.Add("8", "A8", "B8", "C8", "D8", "E8", "F8", "G8", "H8", "I8", "J8");
  22. dgv.Rows.Add("9", "A9", "B9", "C9", "D9", "E9", "F9", "G9", "H9", "I9", "J9");
  23. dgv.Rows.Add("10", "A10", "B10", "C10", "D10", "E10", "F10", "G10", "H10", "I10", "J10");


Maar hoe kan ik dit dynamisch maken dat er een variable aantal kolommen en rijen toegevoegd kunnen worden?
Offline Ontani - 05/03/2009 14:49
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
die 1 tot 10 die zal wel geen probleem zijn hoop ik.
die A tot J kan je met ChrW() doen A = 97, J = 107
Offline Abbas - 05/03/2009 14:49
Avatar van Abbas Gouden medaille

Crew .NET
  1. for(int i = 1; i < 10; i++)
  2. {
  3. dvg.Rows.Add(i.ToString(), "A"+i.ToString(), "B"+i.ToString(), ...);
  4. }
Offline Ultimatum - 05/03/2009 15:06
Avatar van Ultimatum PHP expert Oke bedankt, maar heb nu nog 2 problemen.
Het aantal kolommen is nu niet dynamisch, maar als ik nog een for binnen de for doe dan lukt het niet omdat hij dan steeds dvg.Rows.Add opnieuw doet en hij moet gewoon een parameter toevoegen
En het 2de probleem is dat er steeds een extra row komt, zie afbeelding .
http://img141.i...idview.jpg

De extra rij is aangegeven met rode border.
http://img530.i...idview.jpg

Mijn for loopt tot en met 10, maar hij doet er dus 1 extra zoals je ziet, en als ik dan tot 10 doe krijg ik er alsnog 1 extra, kan ik dit uitzetten ofzo?
Offline Abbas - 05/03/2009 15:21
Avatar van Abbas Gouden medaille

Crew .NET
Een DataGridView doet dit automatisch, probeer eens 9 keer te loopen in plaats van 10.

Voor je dynamische kolommen, gebruik de loop met de getallen die Ontani je gaf (97-107, of verder). Daarna ga je zien hoeveel kolommen er zijn. Dat aantal gebruik je dan om te zien hoeveel parameters je moet meegeven mij die Rows.Add() en ook hoeveel Rows het moeten zijn.
Offline Ultimatum - 05/03/2009 15:26
Avatar van Ultimatum PHP expert Maar als ik maar 9x loop dan krijg ik alleen de getallen 1 t/m 9 en dan een lege rij. Ik moet dus 1 t/m 10 en geen lege rij. Zal even kijken voor de kolommen
Offline Abbas - 05/03/2009 15:29 (laatste wijziging 05/03/2009 15:29)
Avatar van Abbas Gouden medaille

Crew .NET
Heb het al gevonden voor die laatste rij.  Je moet gewoon naar je Properties gaan van je DataGridView en daar zet je 'AllowUserToAddRow' op False. 
Offline Ultimatum - 05/03/2009 15:35
Avatar van Ultimatum PHP expert Nice dat werkt inderdaad . Maar ik krijg nog steeds die dynamische rijen niet voor elkaar en kan ook geen functie ChrW() vinden..
Offline Abbas - 05/03/2009 18:14 (laatste wijziging 05/03/2009 18:15)
Avatar van Abbas Gouden medaille

Crew .NET
ChrW() bestaat niet in C#, dat is iets van VB.NET!  Hieronder staat een code die volledig werkt:

  1. //Array met kolomletters
  2. string[] columns = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
  3. //Array voor de waarden per rij
  4. string[] values;
  5. //Lengte van de kolomArray
  6. int numberOfColumns = columns.Length;
  7.  
  8. //Kolommen toevoegen door middel van loop
  9. foreach (string column in columns)
  10. dgv.Columns.Add(column, "Kolom " + column);
  11.  
  12. //Rijen toevoegen door middel van loop
  13. for(int i = 1; i <= numberOfColumns; i++)
  14. {
  15. //Nieuwe instantie met als aantal eentje meer dan aantal kolommen
  16. values = new string[numberOfColumns+1];
  17. //Eerste waarde is gewoon het getal
  18. values[0] = i.ToString();
  19. //Loopen door alle letters om toe te voegen aan de array
  20. for(int j = 65; j < (numberOfColumns + 65); j++)
  21. values[j-64] = ((char)j).ToString() + i.ToString();
  22. //Array met waardes aan een nieuwe rij toevoegen
  23. //en aan de GridView toevoegen
  24. dgv.Rows.Add(values);
  25. }

Als je nu maar vijf kolommen wilt doe je de letters F tot en met J weg uit de eerste array en alles zal werken naar behoren! 
Offline Ultimatum - 05/03/2009 19:25
Avatar van Ultimatum PHP expert Bedankt het werkt .
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.192s