ASP.NET la Cartographie de Contrôle de la Dynamique de l'Ajout et de la Suppression de la Série de points de données

Si vous êtes familier avec ASP.NET's des contrôles Graphiques, l'objet Graphique contient un certain nombre de Séries d'objets qui sont des séries de points de données qui peuvent être cartographiés. Chaque série peut être visualisé de manière différente (bar, un point ou ligne) sur le même graphique.

J'ai un contrôle personnalisé que j'utilise pour créer et supprimer et modifier des listes de Série d'une INTERFACE utilisateur. En cliquant sur un bouton, le tableau est créé à l'aide de ces Séries. Si j'ai essayer de ré-afficher le graphique, cependant (même à l'identique de la Série), il se lève et lève une exception NullReferenceException.

Voici le code que j'ai reçu un objet d'habillage de la Série (parce que j'ai certaines propriétés personnalisées)

public class DataSeries
{
    private Series _series = new Series();
    ... (bunch of other properties)
    public Series Series
    {
        get { return _series; }
        set { _series = value; }
    }
}

Dans le contrôle de lui-même, je stocke une liste de ceux-ci comme un bien(je ne créer l'objet, en dehors des publications parce que je veux la liste de persister):

private static List<DataSeries> seriesList;

public List<DataSeries> ListOfSeries
    {
        get { return seriesList; }
        set { seriesList = value; }
    }

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            seriesList = new List<DataSeries>();
        }
    }

Alors j'ai une amalgame de contrôle que je peux utiliser pour ajouter de nouveaux DataSeries, les supprimer et de modifier leurs propriétés. Que toutes les œuvres.

Quand ils cliquez sur " Créer un Tableau sur la page, c'est le code qui est exécuté:

protected void refreshChart(object sender, EventArgs e)
{
    chart.Series.Clear();

        foreach (DataSeries s in seriesControl.ListOfSeries)
        {
            string propertyName = s.YAxisProperty;

            //List of data to display for this series 
            List<Sampled_Data> sampleList = Sample.GetSamplesById(s.ComponentId);

            foreach (Sampled_Data dSample in sampleList)
            {
                //GetPropertyValue returns a float associated with the propertyname
                //selected for displaying as the Y Value
                s.Series.Points.AddY(BindingLib.GetPropertyValue(dSample, propertyName));
            }
            chart.Series.Add(s.Series);
        }
    }

La première fois que j'execute ce morceau de code, il fonctionne comme un charme.
La deuxième fois que je clique sur le bouton qui exécute 'refreshChart," je reçois une NullReferenceException parce que la valeur de s'.De la série.Les Points' a la valeur null. Et je ne peux pas créer un nouvel objet du type que les Points de la propriété est - son constructeur est privé ou protégé.

Si je ne suis pas manipuler les Points de biens entre les appels ultérieurs de cette fonction, pourquoi devient-elle nulle?

Il y a peut-être quelques solutions que je pouvais penser de faire DataSeries hériter de la série au lieu d'avoir un alors je pouvais à nouveau les Points de la propriété si l'erreur persiste. Je pourrais aussi copie en profondeur la ListOfSeries et voir si cela résout mon problème. Je pourrais aussi peut-être pousser tous mes attributs personnalisés dans la Série de l'objet qu'il a un customfields propriété (ou quelque chose du même nom). Si je ne suis pas de passage autour d'un objet enveloppant un autre, qui pourrait éliminer le problème.

Des idées pourquoi cela pourrait se produire, et comment il peut être résolu?

OriginalL'auteur phyllis diller | 2009-10-29