2012-12-11 11 views
1

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를 설치했는데 위에서 설명한 것과 다른 상황에서 데이터베이스가 올바르게 업데이트되고 있습니다.

+0

대신'CellValueChanged'의'DataGridView.CellEndEdit' 이벤트를보십시오. –

답변

1

SQL 명령 작성기의 MSDN에서이 예제를 살펴볼 필요가 있습니다. 당신이 어댑터는 업데이트를()를 methood 사용하기 위해서는

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspx

이 작업을 수행하기 위해 설정하는 명령을 필요로한다. 당신은 데이터를 채울 때 명령 빌더는 주어진 선택 명령이 명령을 생성하는 데 사용됩니다 : -

public static DataSet SelectSqlRows(string connectionString, 
    string queryString, string tableName) 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     SqlDataAdapter adapter = new SqlDataAdapter(); 
     adapter.SelectCommand = new SqlCommand(queryString, connection); 
     SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 

     connection.Open(); 

     DataSet dataSet = new DataSet(); 
     adapter.Fill(dataSet, tableName); 

     //code to modify data in DataSet here 

     builder.GetUpdateCommand(); 

     //Without the SqlCommandBuilder this line would fail 
     adapter.Update(dataSet, tableName); 

     return dataSet; 
    } 
} 
관련 문제