[C#] Dynamisch kolom namen weergeven uit Linq

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Enige tijd geleden ben ik overgestapt naar het programmeren in C# (was voorheen VB 2008).

Op dit moment ben ik bezig met een (web) applicatie die verbinding maakt met SQL Server (2008). Het ophalen, wijzigen en inserten van de data doe ik met behulp van LINQ.

Nu wilde ik een aantal records laten zien dmv een datagridview en dit werkt op zich ook wel goed, maar hier zitten voor mij toch wat beperkingen aan (zoals het aanpassen van de layout en de snelheid), zodat ik ben overgestapt naar het laten genereren van de data in een HTML-tabel.

Nu loop ik tegen het volgende probleem aan:

Ik haal in mijn code een aantal records op dmv:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        public List<Relatie> getRelaties()
        {
            dcDataContext myContext = new dcDataContext();

            var result = from relatie in myContext.Relatie select relatie;

            return result.ToList();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {   
                RelatieCL rel = new RelatieCL();
                List<Relatiel> relList = new List<Relatie>();

                relList = rel.getRelaties();

            }
         }


Het data ophalen gaat dan ook goed en wordt teruggegeven in de vorm van een List, die ik ook kan uitlezen.
Echter mijn probleem is het volgende. Ik wil dynamisch de kolomnamen op laten halen in mijn code en daaronder dan de bijbehorende data.
De kolomnamen worden dus in een <tr><td>KOLOMNAAM1<td></tr>geplaatst en de data op dezelfde manier.

Nu lukt het mij niet op door de list heen te 'loopen' en alle kollommen op te halen zonder dat ik de naam op moet geven van de kolom. Dus met relList[0].VOORNAAM en relList[1].ACHTERNAAM kan ik wel data ophalen, maar ik wil deze kolomnamen niet met de hand opgeven, aangezien de tabellen nogal groot zijn.

Misschien moet ik wel op een andere manier de data eruit halen (dus niet met een List), dan wil ik graag een beetje op weg geholpen worden. Ik maak het liefste wel gebruik van Linq, maar als dit met SQL moet is het ook ok.

Is er iemand die kan zeggen hoe ik dit moet doen, ik ben nu al een paar uur aan het zoeken (en uitproberen) via google en de search hier, maar ik kan nog steeds niet echt iets passends vinden.

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 10-09 20:32
Je zou met reflectie de properties/fields van je relatie object op kunnen halen en in een lijst kunnen stoppen. Dan vervolgens voor iedere regel door die lijst heen lopen en elke property waarde ophalen.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Als je het in WPF/Winforms bind op een Grid doet hij dat vanzelf, alle kolomen afgaan en weergeven. Hier niet?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Snake schreef op dinsdag 18 mei 2010 @ 13:49:
Als je het in WPF/Winforms bind op een Grid doet hij dat vanzelf, alle kolomen afgaan en weergeven. Hier niet?
Het is dus mijn bedoeling om geen grid te gebruiken maar dmv een html-table.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
if(null!=list.FirstOrDefault())
{
   Type t = typeof(list[0]);
   PropertyInfo[] properties = t.GetProperties();

   // nu heb je een lijst van al je properties.

   print("<table><tr>");

   foreach(var property in properties)
   {
      // print property title
      print(string.Format("<th>{0}</th>", property.Name));
   }   

   
   print("</tr>");

   foreach(var item in list)
   {
      print("<tr>");
      foreach(var property in properties)
      {
           var propertyValue = t.InvokeMember(property.Name, BindingFlags.GetProperty, null, item, new object[] {});
           print(string.Format("<td>{0}</td>", propertyValue));
      }

      print("</tr>");
   }

   print("</table>");
}

Even uit de losse hand.

Ik heb het niet getest, maar zo op het eerste zicht zie ik geen errors.

[ Voor 27% gewijzigd door Snake op 18-05-2010 16:54 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 13:21

Haan

dotnetter

Snake schreef op dinsdag 18 mei 2010 @ 13:57:
C#:
1
//

Even uit de losse hand.

Ik heb het niet getest, maar zo op het eerste zicht zie ik geen errors.
Behalve dan dat je de HtmlTable class niet gebruikt ;)

[ Voor 49% gewijzigd door Haan op 18-05-2010 14:17 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Haan schreef op dinsdag 18 mei 2010 @ 14:16:
[...]

Behalve dan dat je de HtmlTable class niet gebruikt ;)
Excuses, maar ik denk niet dat dit relevant is aan mijn code :)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt! Ik heb alleen new object() vervangen door new object[].

_/-\o_

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op dinsdag 18 mei 2010 @ 15:43:
[...]


Bedankt! Ik heb alleen new object() vervangen door new object[].

_/-\o_
Crap, teveel VB gedaan, ik pas het even aan :P

Going for adventure, lots of sun and a convertible! | GMT-8

Pagina: 1