2011-08-09 5 views
1

데이터 소스 인 데이터 소스가있는 바인딩 소스가 있습니다.
모든 윈폼 컨트롤 내가 GUI에서 값 변경을BindingSource의 EndEdit은 DataTable을 업데이트하지만 여전히 행 상태는 변경되지 않습니다.

이 (컨트롤 '는 .text 속성에 기록) BindingSource에 다음

저장에 내가

bsSending.EndEdit();  
를 다음을 수행에 데이터 바인딩을 추가했습니다

((DataRowView)this.bsSending.Current).Row)에는 이제 새 값이 포함되지만 RowState은 변경되지 않습니다. 어떻게 가능할까요? 내가

+1

업데이트를 답변으로 게시 한 다음 허용 대답으로 표시하십시오. – cadrell0

답변

2

가 UPDATE GUI의 값을 변경하기 전에 나는 AcceptChanges()에되지 않은 통화를 :

왜 몰라,하지만 특정 행의지며 ​​EndEdit를 호출하면 트릭을 않는 것 같다. 행의 부모는 데이터 테이블이고 테이블의 데이터 세트는 bsSending 데이터 소스의 데이터 소스입니다. bsSending.EndEdit()를 호출하면 값만 업데이트되지만 행 상태는 업데이트되지 않습니다.

나는 비슷한 문제에 대해 .net 서핑을했는데 데이터를 바인딩하기 전에 데이터 집합에서 AcceptChanges()를 호출하면이 오류가 발생할 수 있음을 알 수 있습니다 (값은 데이터 집합으로 업데이트되었지만 행 상태는 변경되지 않음). 그래도 문제에 대한 해결책을 찾지 못했습니다. 따라서 해결책을 마련해 두었습니다.

0

예, 동일한 경험이 있습니다. Visual Studio 2010 및 .NET Framework v.4.0을 사용하고 있습니다. DataTable에 바인딩 된 DataGridView 컨트롤로 작업하고 있습니다.

셀 값이 여전히 편집 모드에있는 동안 사용자가 양식을 닫으려고하면 DataGrid에서 편집 모드를 종료하고 변경 사항을 저장할지 아니면 잃어 버릴 지 묻습니다. -이 편집을 끝낼 수 있도록 DataGridView에에지며 EndEdit()

if (dgv.IsCurrentCellInEditMode) 
{ 
       dgv.EndEdit(); 
       updatedData.Rows[dgv.CurrentCell.RowIndex].EndEdit(); 
} 
      if (updatedData.GetChanges() != null && updatedData.GetChanges().Rows.Count > 0) 
{ 
    // if there are changes, update the dataset 
} 

은 내가 모두를 호출 할 필요가 있다고 지적하고 싶은 :

은 나를 위해 작동 코드입니다. 그런 다음 DataTable에서 EndEdit()을 호출하여 'modified'행을 표시합니다.

0

비슷한 문제가 있습니다. 첫 번째 탭 페이지에는 그리드가 있고 두 번째 탭 페이지에는 두 개의 동일한 바인딩 소스에 바인딩 된 텍스트 상자가 있습니다. 행 내용을 변경하고 그리드에서 내용이 변경되지만 행 시작은 변경되지 않습니다.

내 코드이었다

DataRow dataRow = ((DataRowView)bindingSource1.Current).Row; 
if(dataRow.RowState != DataRowState.Modified) 

나는 수정의 RowState이 예상.

누락 된 오류 코드 :

bindingSource1.EndEdit(); 
여기

전체 솔루션 :

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (tabControl1.SelectedIndex == 0) 
    { 
     bindingSource1.EndEdit(); 
     DataRow dataRow = ((DataRowView)bindingSource1.Current).Row; 
     if(dataRow.RowState != DataRowState.Modified) 
     { 
      return; 
     } 
     DialogResult userOption = MessageBox.Show("Save?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
     if (userOption == System.Windows.Forms.DialogResult.Yes) 
     { 
      Save(); 
     } 
    } 
} 

내 솔루션 : 나는 하나 개의 형태로 비슷한 상황으로 실행하고 나는 그 문제가 깨달았다

1

바인딩에서 레이블 도구 설명 속성.먼저 값을 null로 변경했을 때에서 null을 일부 문자열로 변경하면 문제가 사라지지만 프로젝트에 다른 변경을 한 경우 문제가 다시 나타났습니다.. 도구 설명 속성에 대한 바인딩을 삭제하면 문제가 다시 사라졌습니다. 아직도 나는 영원히 알지 못한다.

0

프로그래밍 방식으로 행 변경 내용을 커밋하려면 폼의 Validate 메서드를 호출하십시오. 데이터 소스가 BindingSource 인 경우 callBindingSource.EndEdit을 호출 할 수도 있습니다.

IsCurrentRowDirty

0

나는 그것이 이전 게시물 알고 참조하십시오. DataRowView.EndEdit을 직접 호출하여 해결할 수 있지만 제 경우에는 정확한 이유를 찾았습니다.

실수로 한 컨트롤의 두 속성을 다른 열에 바인딩했습니다. (필자의 경우, Devexpress 'TextEdit 컨트롤 - EditValueText 속성을 언더 레이 테이블의 다른 열에 동시에 바인딩했습니다.)

어쩌면 2016+에서도 누군가를 도울 것입니다. 잡기가 더러운 버그 였기 때문일 수 있습니다.

관련 문제