Toon posts:

[C#] Inhoud collection bij binden aan DataGrid beinvloeden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een Custom Collection, die overerft van CollectionBase. Ik wil nu de data die getoond wordt aan de gebruiker beinvloeden. Ik heb hiervoor een FilteredList in mijn collection, die de data bevat die de gebruiker te zien moet krijgen.

Als ik dit bind aan een ListBox bijvoorbeeld, kan ik de data op de volgende manier beinvloeden:

C#:
1
2
3
4
public new IEnumerator GetEnumerator()
{
    return this.FilteredList.GetEnumerator();
}


Dit zorgt ervoor dat er alleen door de items in de gefilterde lijst wordt gelopen. Dit werkt ook in een for...each.

Ook met de volgende code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
public CustomCollectionItem this[int index]
{
    return this[index];
}

public new int Count
{
    get
    {
        return this.FilteredList.Count;
    }
}


en nog wat andere implementaties krijg ik nagenoeg volledige functionaliteit die ik wil hebben. Nu werkt het met een DataGrid anders...

Een DataGrid doorloopt de items niet door middel van een IEnumerator, niet door middel van de this[int index], en ik kom er niet achter hoe ik kan beinvloeden welke gegevens de DataGrid gebruikt bij het binden. Ik kom er niet tussen...

Weet iemand misschien op welke manier ik de standaardfunctionaliteit van het binden van data aan een datagrid kan veranderen? Thanks!

Verwijderd

Topicstarter
Ik denk dat ik al een oplossing gevonden heb, op het eerste gezicht lijkt het wat:

Ik implementeer de IListSource interface... Deze heeft de voorkeur van List/Iterative controls, en is dus op zowel de listbox als de datagrid van toepassing:

C#:
1
2
3
4
public IList GetList()
{
    return this.FilteredList.List;
}


waarbij 'List' de list is uit te CollectionBase, oftewel de directste toegang tot de onderliggende data.

Blijkbaar kijken controls of de verzameling van het type IListSource is, zoniet kijkt een ListBox naar IEnumerable, en een DataGrid zoekt blijkbaar een andere manier :?

[ Voor 18% gewijzigd door Verwijderd op 29-08-2005 17:40 ]


Verwijderd

Topicstarter
Helaas, dit lijkt het niet te zijn. Hij haalt wel degelijk de List uit de gefilterde lijst op, de datasource blijft uiteraard de gehele lijst. Op een of andere manier gaat hij vervolgens alsnog aan de slag met de hele lijst. Een breakpoint op GetList() wordt aangeroepen als ik DataBind() uitvoer, dus ik zie dat de GetList de gefilterde lijst returned. Echter als ik kijk naar welke items hij vervolgens doorloopt, zijn dit ze alsnog allemaal?!?

Lijkt erop alsof hij de datasource alsnog zelf naar een IList cast, in plaats van het resultaat van de GetList() methode te gebruiken. Als ik nu mijn collection wil IList wil laten implementeren (wat indirect al gebeurd door CollectionBase, maar ik wil graag een specifieke indexer toevoegen dus moet ik hem opnieuw implementeren?!) en een IList.this[int index] property toevoeg, dan doet hij helemaal niets meer... :(