문제

나는 내 맞춤형 사전 클래스에 데이터를하려고합니다. Formload에서는 CAR.DESC에 결합 할 수 있지만 ratecache.desc에 바인딩 할 수는 없습니다. 둘 다 공개 문자열 속성입니다.

내가 무엇을 놓치고 있습니까?

감사!

System.ArgumentException은 처리되지 않은 Message = "DataSource의 속성 또는 열 DESC에 바인딩 할 수 없습니다.

    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");
    }
도움이 되었습니까?

해결책

내 생각에 귀하의 수업이 컬렉션 인 사전에서 상속되기 때문에 TextBox에 대한 데이터 바인딩을 버린다는 것입니다. Windows Forms는 클래스의 속성에 직접 바인딩 할 때 다른 컬렉션에 대한 데이터 밴드를 다루는 자체 방법이 있습니다. 답이 많지는 않지만, 나는 그 주위에 실제로 방법이 있다고 생각하지 않습니다. 나의 제안은 사전에서 직접 상속받지 않는 것입니다. 오히려 내부 사전을 유지하고 필요에 따라 방법을 노출하십시오. 또는 Texbox를 직접 데이터를 데이터에 데이터를 바르지 마십시오. 오히려, "DESC"속성이 요금 관리 클래스에서 변경 될 때마다 이벤트를 제기 한 다음 양식에서 해당 이벤트를 들어보십시오. 변경되면 텍스트 상자를 업데이트하십시오.

다른 팁

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