Funktionen abgeleiteter Klassen aus base heraus aufrufen

17/04/2009 - 23:35 von Michaela Meier | Report spam
Hi,

Ich habe ein UserControl erstellt, das jedoch nur als eine Art Vorlage
für weitere Controls dient.
Es handelt sich um ein DataGridView, dessen grundlegende Funktionalitàt
(Datenstruktur, Spaltendefinition, Daten nachladen wg. VirtualMode,
Sortierung) in dieser Vorlage erledigt wird.

Das einzige, was die abgeleiteten Controls tun, ist die Tabelle, auf die
CellValueNeeded zurückgreift, mit Daten zu füllen sowie die Reihenfolge
und Sichtbarkeit einzelner Spalten anzupassen.

Das ganze sieht im Prinzip so aus:

public partial class MeinGrid : UserControl
{
// ganze Menge anderes aber hierfür irrelevantes Zeug

protected DataTable _dt;

public void DatenEinlesen()
{
// bleibt leer
}

private void datagridview1_ColumnHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
// Sortier-Einstellungen festlegen
DatenEinlesen();
}
}

public partial class MeinGridA : MeinGrid
{
// ...

public new void DatenEinlesen()
{
// Database-Query zugeschnitten auf Gridtyp A
// füllt _dt
}
}

public partial class MeinGridB : MeinGrid
{
// ...

public new void DatenEinlesen()
{
// Database-Query zugeschnitten auf Gridtyp B
// füllt _dt
}
}

Mein Problemchen ist nun, daß ich es nicht schaffe, die korrekte
"DatenEinlesen"-Funktion (nàmlich die von A oder B) aus der Sortierung
heraus aufzurufen. Dieser Aufruf landet immer in der "leeren" Vorlage.

Könnte mir denken, daß mir hier Events weiterhelfen könnten ... aber wie
mache ich das, daß sich nicht alle (ingesamt mindestens 5) UserControls
davon angesprochen fühlen?

Danke :-)
 

Lesen sie die antworten

#1 Thorsten Doerfler
18/04/2009 - 00:08 | Warnen spam
Michaela Meier schrieb:
Das ganze sieht im Prinzip so aus:

public partial class MeinGrid : UserControl
{
// ganze Menge anderes aber hierfür irrelevantes Zeug

protected DataTable _dt;

public void DatenEinlesen()
{
// bleibt leer
}

private void datagridview1_ColumnHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
// Sortier-Einstellungen festlegen
DatenEinlesen();
}
}

public partial class MeinGridA : MeinGrid
{
// ...

public new void DatenEinlesen()
{
// Database-Query zugeschnitten auf Gridtyp A
// füllt _dt
}
}

public partial class MeinGridB : MeinGrid
{
// ...

public new void DatenEinlesen()
{
// Database-Query zugeschnitten auf Gridtyp B
// füllt _dt
}
}

Mein Problemchen ist nun, daß ich es nicht schaffe, die korrekte
"DatenEinlesen"-Funktion (nàmlich die von A oder B) aus der Sortierung
heraus aufzurufen. Dieser Aufruf landet immer in der "leeren" Vorlage.



In diesem Fall musst Du die Methode DatenEinlesen in Deiner Basisklasse mit

public virtual void DatenEinlesen()

deklarieren und in den abgeleiteten Klassen mit

public override void DatenEinlesen()

Dann sollte Dein Plan aufgehen, wenn ich Dich richtig verstanden habe.

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen