سؤال

وأنا أحاول أن DataBind عناصر لصفي القاموس المخصص. في formLoad، يمكنني ربط Car.Desc ولكن لا أستطيع ربط RatesCache.Desc. كلاهما خصائص السلسلة العامة.

وماذا أنا في عداد المفقودين؟

وشكرا!

وكان System.ArgumentException لم تتم معالجته   رسالة = "لا يمكن ربط الملكية أو عمود تفاصيل عن مصدر البيانات \ اسم ص \ nParameter: dataMember"   مصدر = "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");
    }
هل كانت مفيدة؟

المحلول

وتخميني هو أن لصفك وراثة من قاموس وهو مجموعة، فإنه يلقي قبالة ربط البيانات لمربع النص. أشكال النوافذ وانها طريقتي الخاصة في التعامل مع ربط البيانات إلى مجموعة مختلفة ثم عند الربط مباشرة إلى خاصية من فئة. ليس كثيرا من إجابة، وأنا أعلم، لكنني لا أعتقد أن هناك حقا وسيلة من حوله. اقتراحي سيكون إما لا ترث مباشرة من قاموس. بدلا إبقاء قاموس الداخلي، وفضح أساليب حسب الحاجة. OR، لا DataBind عناصر من texbox مباشرة. بدلا من ذلك، رفع حدث كلما بك "تفاصيل" تغييرات الخاصية في الصف RatesCache الخاص بك، وبعد ذلك في النموذج الخاص بك الاستماع إلى هذا الحدث. عندما يتغير ذلك، تحديث النص الخاص بك.

نصائح أخرى

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;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top