Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[.net]Class met dynamische properties *

Pagina: 1
Acties:

  • mr_taipan
  • Registratie: Februari 2002
  • Laatst online: 03-12-2024
Wat ik het liefst zou willen is een class die een soort wildcard property heeft. wat ik daarmee bedoel is dat de property pas bestaat als hij aangeroepen word en centraal in de class het resultaat terug gegeven word.

Het idee is om de class aan een Datagridview te binden en dan aan de hand van de kolomen in de gridvieuw de juiste data uit de class te tonen.

Eigenlijk denk ik niet dat een get* property mogelijk is. Is er dan een mogelijkheid om een interface Ibindable (als zoiets bestaat) te implementeren?

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 13:26

voodooless

Sound is no voodoo!

Ik denk dat je moet kijken naar dingen als reflection om zo dynamische methoden aan te kunnen roepen.

Do diamonds shine on the dark side of the moon :?


  • giMoz
  • Registratie: Augustus 2002
  • Laatst online: 16-11 16:38

giMoz

iets met meester...

de enige vraag die ik me bedenk bij dit: waarom zou je het willen??

Of niet natuurlijk...


  • beany
  • Registratie: Juni 2001
  • Laatst online: 20-11 16:08

beany

Meeheheheheh

Reflection is inderdaad de enige manier om dit te doen. Daarmee kan je een class(en properties, methodes etc) compleet vanaf de grond af aan op bouwen.

Beetje googlen en MSDN'en zal je een heel eind op weg moeten helpen.

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • mr_taipan
  • Registratie: Februari 2002
  • Laatst online: 03-12-2024
Reflection heb ik niks aan. Dat is alleen handig als je in een class of assemby wilt waar je niks over weer.

Waar het mij om gaat is dat een datagridviewcolumn tijdens het Binden van object a met een virtuele property Naam a.Naam aanroept ik dat als volgt implementeer

C#:
1
2
3
4
5
6
7
8
9
class A{

  private Hashtable _data;

  public string propertyhandle(string naam){
    return _data[naam];
  }

}

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 06-11 13:54
Ik heb geen direct antwoord, maar wel een paar gedachten:

Voordat databinding in .net met objecten kon werken werkte het al wel op datasets waar op basis van string of positie het goede data-element werd gevonden. Wellicht kun je dat gebruiken?

Ik ben wel zoiets tegengekomen, maar dat ging over dynamische talen in .net (iron-python, boo). Zie http://www.ayende.com/Blo...a-duck-and-it-quacks.aspx
en http://blogs.msdn.com/hugunin/archive/2007/05.aspx.

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 08:32
daar is de IBindingList voor bedoeld. Implementeer deze op je class en je kunt de Hashtable binden aan je datagridview. Als je c# 2.0 gebruikt zou ik de class erven van BindingList<T>

[ Voor 21% gewijzigd door DrDelete op 09-01-2008 09:30 ]


  • mr_taipan
  • Registratie: Februari 2002
  • Laatst online: 03-12-2024
Ik denk niet dat een IBindingList geschikt is.

kan hier: http://msdn2.microsoft.co...ntmodel.ibindinglist.aspx niet iets ondekken van wat ik graag wil.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Reflection is niet het antwoord op de vraag van de TS, maar lijkt me wel de verklaring waarom het niet kan. Met reflection kun je namelijk bepalen of een class de functie getX heeft, zonder getX aan te roepen. In het geval van de TS is het antwoord dus ja én nee.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Waarom niet zelf een DataSet maken? Dus gewoon in je code een nieuwe DataSet (niet in de designer dus), nieuwe tabel erin, en dynamisch de gewenste kolommen met de gewenste types erin zetten. Zo'n DataRow werkt intern met een item array, dus hoef je niet een object te hebben die aan je properties voldoet.

Met Reflection en wat compiler truukjes kán het wel trouwens, maar dat is érg omslachtig omdat dat in feite neerkomt op on the fly een assembly compilen met daarin de gewenste class.

Ik zou het dus op de normale manier, namelijk met een DataSet, doen. Succes.
Pagina: 1