C# 4.0으로 작성된 2 개의 폼이 있습니다. FormA에는 DataAdapter 및 BindingSource가있는 MS SQL 데이터베이스에 연결된 DataGridView가 있습니다. 그리드에는 체크 박스가 있습니다. 사용자가 확인란을 선택하면 FormB가 호출됩니다. FormB에는 "예"/ "아니오"버튼이 있습니다. FormB의 DialogResult가 "예"이면 사용자가 FormA에서 추가 항목을 누르지 않고 데이터베이스가 확인란의 새 값으로 업데이트되어야합니다.WinForm이 CellValueChanged 이벤트에서 DataGridView 변경 내용을 커밋하려고했습니다.
견적 :
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DialogResult dialogRes = new FormB().ShowDialog();
if (dialogRes == DialogResult.Yes)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
dataGridView1.EndEdit();
table.EndInit();
dataAdapter.Update(table);
}
}
결과는 데이터베이스에 저장되지 않습니다 여기
은 일부 의사 코드입니다. 단추 이벤트에 동일한 "저장/업데이트"기능을 추가하면 제대로 작동합니다. CellValueChanged 이벤트를 완료해야하기 때문에 (그리고 추가 이벤트가 트리거되어야 함) 변경 사항을 성공적으로 커밋 할 수 있어야합니다. 임 너트가는도와주세요 ...
편집 : CellEndEdit를 사용하는 것도 없다 같은 효과 -이있다. SqlCommandBuilder를 설치했는데 위에서 설명한 것과 다른 상황에서 데이터베이스가 올바르게 업데이트되고 있습니다.
대신'CellValueChanged'의'DataGridView.CellEndEdit' 이벤트를보십시오. –