Question

J'essaie d'établir une liaison de données avec ma classe de dictionnaire personnalisée. Dans formLoad, je peux me lier à Car.Desc mais je ne peux pas me lier à RatesCache.Desc. Ce sont deux propriétés de chaîne publiques.

Qu'est-ce qui me manque?

Merci!

L'exception System.ArgumentException n'a pas été gérée.   Message = " Impossible de se connecter à la propriété ou à la colonne de la source de données. \ R \ nNom du paramètre: dataMember "   Source = " System.Windows.Forms "   ParamName = " dataMember "

    public class RatesCache : Dictionary<int, Rate>
    {
        public string Desc { get; set; }
    }

    public class Car
    {
        public string Desc { get; set; }
    }

    static Car car = new Car();

    static RatesCache rc = new RatesCache();

    private void Form1_Load(object sender, EventArgs e)
    {
        rc.Desc = "hello too";
        car.Desc = "Im a car";
        textBox1.DataBindings.Add("Text", rc, "Desc");
    }
Était-ce utile?

La solution

Je suppose que, comme votre classe hérite d'un dictionnaire qui est une collection, elle supprime la liaison de données pour la zone de texte. Windows Forms a sa propre façon de traiter la liaison de données avec une collection différente de la liaison directe à une propriété d'une classe. Je ne sais pas trop quoi répondre, mais je ne pense pas qu'il y ait vraiment un moyen de le contourner. Ma suggestion serait de ne pas directement hériter de Dictionary; conservez plutôt un dictionnaire interne et exposez les méthodes nécessaires. OU, ne faites pas directement une recherche dans la texbox. Relevez plutôt un événement chaque fois que votre " Desc " quot " changements de propriété dans votre classe RatesCache, puis dans votre formulaire, écoutez cet événement. Lorsque cela change, mettez à jour votre zone de texte.

Autres conseils

private void Form1_Load(object sender, EventArgs e)
{
    rc.Desc = "hello too";
    car.Desc = "Im a car";
    textBox1.DataBindings.Add("Text", rc, "Desc");
    textBox1.TextChanged .TextChanged += _textBox1_TextChanged;
}

private void _messagesReceviedLabel_TextChanged(object sender, EventArgs e)
{
    _textBox1.Text = rc.Desc.ToString();
}

public class RatesCache : Dictionary<int, Rate>
{
    public string Desc { get; set; }

    public override string ToString()
    {
        return Desc;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top