2009-07-08 9 views
5

karmię kontrolę Chart Microsoft z IEnumerable własnego klasy ChartPointdatabind z kontroli wykres daje NotImplementedException

public class ChartPoint 
    { 
     public double Xvalue { get; set; } 
     public double Yvalue { get; set; } 
     public string Url { get; set; } 
     public string Tooltip { get; set; } 
    } 

Potem próbuje databind IEnumerable < ChartPoint>:

serie.Points.DataBind(points, "Xvalue", "Yvalue", "Tooltip=Tooltip,Url=Url"); 

ale następnie uderza wyjątek NotImplementedException w tym wierszu:

System.Linq.Iterator`1.System.Collections.IEnumerator.Reset() +29 
    System.Web.UI.DataVisualization.Charting.DataPointCollection.DataBind(IEnumerable dataSource, String xField, String yFields, String otherFields) +313 

Wha Czy robię źle?

Odpowiedz

12

Czy używasz iteratora C#?

C# iteratory nie implementują funkcji Reset w wygenerowanym liczniku IEnumerator i wywołają wyjątek NotImplementedException, jeśli zostanie wywołany. Wygląda na to, że konkretna kontrola wymaga obecności tej metody.

Najprawdopodobniej będziesz musiał użyć kolekcji, która obsługuje Resetuj na iteratorze. Najprostszym sposobem osiągnięcia tego celu jest użycie List<T> zawinąć istniejącego IEnumerable<T>

Na przykład

List<ChartPoint> list = new List<ChartPoint>(points); 
serie.Points.DataBind(list, "Xvalue", "Yvalue", "Tooltip=Tooltip,Url=Url"); 
+0

Rozwiązane, dzięki! –

+0

+1 Dla rozwiązania problemu! –

2

Czy używasz bloków iteratora (np. yield return)? Kompilator nie wygeneruje metody Reset, jeśli wykonasz, generując metodę Reset, ale metoda wyśle ​​NotImplementedException.

+0

Drobna korekta. Generuje reset (wymaga tego IEnumerator ), po prostu wyrzuca NotImplementedException – JaredPar

+0

Bardzo prawdziwe - odpowiedź poprawiona! –

0

Zobacz mój raport o błędzie Połącz here. Głosujcie na to i być może MS poprawi to w następnej wersji wykresu.

Powiązane problemy