[C#] Casting problemen...

Pagina: 1
Acties:

  • Jabbah
  • Registratie: Februari 2004
  • Laatst online: 12:03
Ik heb een object CustomDataRow:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class CustomDataTable : DataTable
{
    ...
    public DataColumn[] ZoekKolommen()
    {
        // code
    }
    ...
}

public class Tester
{
    ...
    public void Test()
    {
        ...
        foreach(DataTable dt in ds.Tables)
        {
            // Hier dt casten naar CustomDataTable
        }
    }
    ...
}

Ik heb me suf gezocht, maar ik kom er maar niet achter hoe ik nu de DataTable in het foreach statement kan casten naar CustomDataTable.

Hoe moet ik die cast uitvoeren, zodat ik ook de ZoekKolommen methode tot mijn beschikking heb?

  • whoami
  • Registratie: December 2000
  • Laatst online: 25-05 23:56
code:
1
((CustomDataTable)dt).ZoekKolommen()


Maar dat gaat niet werken denk ik, aangezien de tables in je dataset geen CustomDataTable's zijn.
Wat je wel kunt doen, is een CustomDataTable object maken op basis van die DataTable.
Je zult dan wel je class moeten aanpassen, zodanig dat die niet inherit van DataTable, maar een datatable encapsuleert, en een constructor heeft die een datatable object als argument heeft.
Dan kan je dit doen:
code:
1
2
3
4
foreach( DataTable dt in ds.Tables )
{
    CustomDataTable cdt = new CustomDataTable (dt);
}


Maareh, wat doet die ZoekKolommen? Kan je niets doen met de Columns property van de DataTable ?

[ Voor 9% gewijzigd door whoami op 11-05-2004 12:15 ]

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
het enige dat je moet doen is je datatable objecten in de dataset handmatig aanmaken. Dus niet een dataset fillen met een adapter, maar eerst de datatables aanmaken in de dataset en dan dus instances aanmaken van je eigen class.

Daarna DIE fillen met de data-adapter, dmv de datatable override van Fill.

Daarna kun je ze wel casten.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Jabbah
  • Registratie: Februari 2004
  • Laatst online: 12:03
@whoami:
Je eerste opmerking lukt inderdaad niet (InvalidCastException). Blijkbaar is het niet mogelijk om een class A te casten naar een class B die afgeleid is van Class A. Is dit niet vreemd overigens?

Je tweede opmerking is wel een goeie. Een soort van wrapper class dus. Ik denk dat ik hier maar voor ga.

Wat betreft de ZoekKolommen methode; dat was eigenlijk maar een voorbeeld. Het ging me meer om het principe.

@Efbe:
Is ook een oplossing, vergt wel wat meer tijd. :/

  • whoami
  • Registratie: December 2000
  • Laatst online: 25-05 23:56
Jabbah schreef op 11 mei 2004 @ 12:29:
@whoami:
Je eerste opmerking lukt inderdaad niet (InvalidCastException). Blijkbaar is het niet mogelijk om een class A te casten naar een class B die afgeleid is van Class A. Is dit niet vreemd overigens?
Neen dat is niet vreemd. Je object is nl. van het type DataTable en niet van het type CustomDataTable.
In je dataset zitten nl. DataTable's , en geen CustomDataTables.

https://fgheysels.github.io/


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 25-05 16:59

Robtimus

me Robtimus no like you

Jabbah schreef op 11 mei 2004 @ 12:29:
@whoami:
Je eerste opmerking lukt inderdaad niet (InvalidCastException). Blijkbaar is het niet mogelijk om een class A te casten naar een class B die afgeleid is van Class A. Is dit niet vreemd overigens?
Ik ben niet echt bekend met C# zelf, maar dit zou gewoon moeten kunnen. Weet je zeker dat die datatables in ds.Tables wel CustomDataTables zijn? Kun je daar niet de classname van printen oid?

* Robtimus is meer into Java

Edit: wat whoami dus zegt.

[ Voor 4% gewijzigd door Robtimus op 11-05-2004 12:33 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • whoami
  • Registratie: December 2000
  • Laatst online: 25-05 23:56
IceManX schreef op 11 mei 2004 @ 12:32:
[...]
Ik ben niet echt bekend met C# zelf, maar dit zou gewoon moeten kunnen. Weet je zeker dat die datatables in ds.Tables wel CustomDataTables zijn? Kun je daar niet de classname van printen oid?
Neen, dat kan niet lukken.

Als je DataSet CustomTables bevat (die afgeleid zijn van DataTable), en ds.Tables is een collectie van DataTables, dan lukt het wel.
Echter, als je dit doet:

code:
1
myDS.Tables.Add (new DataTable());

Dan is het maar logisch dat je nadien dit niet kunt doen:
code:
1
((CustomDataTable)myDS.Tables[0])


Als je echter dit doet:
code:
1
myDS.Tables.Add (new MyCustomTable())

Dan kan je natuurlijk wel casten.

https://fgheysels.github.io/


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 25-05 16:59

Robtimus

me Robtimus no like you

whoami schreef op 11 mei 2004 @ 12:35:
[...]

Neen, dat kan niet lukken.

Als je DataSet CustomTables bevat (die afgeleid zijn van DataTable), en ds.Tables is een collectie van DataTables, dan lukt het wel.
Echter, als je dit doet:

code:
1
myDS.Tables.Add (new DataTable());

Dan is het maar logisch dat je nadien dit niet kunt doen:
code:
1
((CustomDataTable)myDS.Tables[0])


Als je echter dit doet:
code:
1
myDS.Tables.Add (new MyCustomTable())

Dan kan je natuurlijk wel casten.
Ik snap het OO principe wel hoor, ik ging ervan uit dat TS ze als Customs had toegevoegd. Zie ook mijn vraag:
IceManX schreef op 11 mei 2004 @ 12:32:
Weet je zeker dat die datatables in ds.Tables wel CustomDataTables zijn?

More than meets the eye
There is no I in TEAM... but there is ME
system specs

Pagina: 1