Listbox 선택 변경은 BindingSource에서 데이터 세트로 변경되지 않습니다.

StackOverflow https://stackoverflow.com/questions/609052

문제

이 질문에 대한 답은 "바인딩 네비게이터를 사용하지 않고 타이핑 된 데이터 세트를 사용하지 마십시오"라고 판명 될 수 있습니다. 그러나 나는 내가보고있는 행동에 대해 궁금합니다.

그래서 나는 모든 컨트롤이 데이터 소스 탐색기에서 끌려가는 양식을 만들었습니다. 바인딩 네비게이터는이 특정 형식에 못 생기고 부적절하기 때문에 삭제했습니다. ListBox를 추가하고 DataSource를 BindingSource로 설정했습니다.
ListBox가 바인딩되지 않았으며 BindingSource에서 자체적으로 채워집니다. 내가 믿지 않은 마술에 의해, Listbox에서 움직이는 것은 BindingSource를 탐색하고 다른 모든 컨트롤이 그에 따라 업데이트되고 있습니다.

BindingSource에서 Endedit을 명시 적으로 호출 한 다음 테이블 어댑터를 통해 데이터 소스를 업데이트 할 수 있습니다. 잘 작동합니다.

바운드 컨트롤을 변경하고 ListBox에서 새 옵션을 클릭하면 변경 사항이 있는지 확인하고 저장 또는 재설정이있는 경우 프롬프트를 확인할 수 있습니다.

여기에 내가 알아낼 수 없었던 이상한 부분이 있습니다.

내가 어떤 이벤트에 첨부하든 dataset.haschanges는 두 번째 Listbox가 변경 될 때까지 TRUE를 반환하지 않습니다. 나는 수십 개의 제안을 검색하고 시도했지만 대부분은 말도 안되지만 유망한 것처럼 보였습니다. 불운.

편집 : 두 번째 클릭이 중요한 것은 아닙니다. 원본 (편집 된) 항목을 다시 클릭 할 때입니다.

도움이 되었습니까?

해결책

질문을 한 후 BindingSources, DataSets 및 Tableadapter에 대해 조금 더 배웠습니다.

다음은 다음과 같습니다.

    private void MyListBox_Click(object sender, EventArgs e)
    {
        this.myBindingSource.EndEdit();
        if (myDataSet.HasChanges())
        {
            if (MessageBox.Show("Save changes?", "Before moving on", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                myTableAdapter.Update(myDataSet.myDataTable);
            }
            else
            {
                myDataSet.RejectChanges();
            }
        }
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top