문제

컬렉션에 바인딩된 그리드가 있습니다.어떤 이유에서인지는 모르겠지만 이제 그리드에서 어떤 작업을 수행하면 그리드가 업데이트되지 않습니다.

상황 :그리드에서 버튼을 클릭하면 같은 줄에 있는 값이 증가합니다.클릭하면 디버깅하고 값 증가를 볼 수 있지만 그리드의 값은 변경되지 않습니다. 하지만 버튼을 클릭하고 창을 최소화하고 복원하면 값이 업데이트됩니다.이전과 같이 값을 업데이트하려면 어떻게 해야 합니까?

업데이트이것은 해결되지 않았지만 여기에서 가장 좋은 답변을 수락했습니다.

데이터가 데이터베이스에서 왔지만 캐시에서 가져온 것이 아닌 경우 평소처럼 작동하기 때문에 해결되지 않습니다.개체가 직렬화되고 이벤트가 손실되는 프로세스가 발생합니다.이것이 내가 그것들을 다시 구축하는 이유이며, 그것들과 상호 작용할 수 있기 때문에 내가 아는 대로 작동하지만 알 수 없는 이유로 그리드 업데이트에는 작동하지 않는 것 같습니다.

도움이 되었습니까?

해결책

바인딩이 양방향이 되려면 컨트롤에서 데이터 소스로, 데이터 소스에서 데이터 소스로 제어하려면 다음 두 가지 가능한 방법 중 하나로 속성 변경 알림 이벤트를 구현해야 합니다.

  • 구현 INotifyPropertyChanged 인터페이스를 구현하고 속성이 변경되면 이벤트를 발생시킵니다.

    public string Name 
    {
      get
      {
        return this._Name;
      }
      set
      {
        if (value != this._Name)
        {
            this._Name= value;
            NotifyPropertyChanged("Name");
        }
      }
    }
    
  • 변경 시 컨트롤에 알려야 하는 모든 속성에 대해 변경된 이벤트를 구현합니다.이벤트 이름은 다음 형식이어야 합니다. 속성 이름변경됨:

    public event EventHandler NameChanged;
    
    public string Name 
    {
      get
      {
        return this._Name;
      }
      set
      {
        if (value != this._Name)
        {
            this._Name= value;
            if (NameChanged != null) NameChanged(this, EventArgs.Empty);
        }
      }
    }
    

    *참고로 컨트롤이 데이터 소스에서 값을 다시 읽기 때문에 속성 값은 창 최대화 후 올바른 값입니다.

다른 팁

업데이트 코드에서 DataBind를 호출해야 할 것 같습니다.

내 컬렉션과 그리드 사이에 BindingSource 개체를 사용하고 있습니다.보통은 아무 것도 전화할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top