2012-09-22 5 views
2

데이터베이스에서 채워지는 DataGridView가 있습니다. DGV의 변경 사항을 데이터베이스에 저장하는 버튼이 있습니다. 정상적으로 작동합니다. 그러나 DGV에서 someting이 변경되면 데이터베이스가 자동으로 업데이트되기를 원합니다.이벤트의 DataGridView에서 데이터베이스 업데이트가 제대로 작동하지 않습니다.

CellEndEdit, CellLeave, CellValidated, CellValueChanged 및 SelectionChanged로 여러 이벤트를 시도했습니다. 셀 내용을 편집하고 위 또는 아래 셀을 입력하거나 누르거나 셀을 잘 선택하면 변경 내용이 데이터베이스에 저장되지만 탭을 클릭하거나 옆에있는 셀을 선택하면 같은 행에 셀이 선택됩니다. 변경 사항이 저장되지 않았습니다. 위에서 언급 한 어떤 사건도이 문제에 도움이되지 못했습니다.

// EDIT

몇 가지 예제 코드 :

나는 일반적으로 나는 버튼

private void bt_save_em_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      da_em.Update(dt_em); 
      MessageBox.Show("Database updated."); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
      throw; 
     } 
    } 

로 업데이트하지만 내가 좋아하는 것이

query_em = "select * from Table;"; 
try 
{ 
    dt_em = new DataTable(); 
    da_em = new OleDbDataAdapter(query_em, connString); 
    cb_em = new OleDbCommandBuilder(da_em); 
    bs_em = new BindingSource(); 

    da_em.Fill(dt_em); 
    bs_em.DataSource = dt_em; 
    dgv_em.DataSource = bs_em; 
    dgv_em.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
    throw; 
} 

처럼 내 DGV을 채우기 이런 일이 제대로 이루어지기는하지만 그렇지 않습니다. 정확한 문제는 위에 설명되어 있습니다.

private void dgv_em_SelectionChanged(object sender, EventArgs e) 
    { 
     da_em.Update(dt_em); 
    } 
+0

우리에게 몇 가지 예제 코드를 보여 주시기 바랍니다 그래서 우리는 – Star

+0

몇 가지 코드를 추가 할 수 있습니다, 난이 도움이되지만 앞서 갈 수있는 방법을 볼 해달라고;) 난 후 상기 다른 이벤트가 필요 . 코드는 지금까지 내가 내 질문에 언급 한대로 – daydr3amer

답변

1

오래된 질문을하지만 난 어떤 사람을 도울 수있는 솔루션을 찾았습니다. 사실 datagridview (dgv라고 부르면 나는 ^^) 입력을 확인하고 행을 변경할 때만 (입력, 화살표, 클릭 등을 누름) 사용할 이벤트가 RowValidated입니다. 그러나 같은 행의 셀을 클릭하는 경우와 같이 편집 후 동일한 행에 있으면이 이벤트가 실행되지 않습니다. 내가 foud 솔루션을 검증을 강제로했습니다 : 다른 이벤트를 사용하여 전화 (VB에서 me.validate)

여기에 몇 가지 VB 샘플 코드입니다 (내가 전에 말했듯이, 나는 C#으로 변환하는 게으름이다^^) , 난이 도움이되기를 바랍니다 :

Public Class Form1 
    Dim ValueChanged As Boolean 
    Dim da As MySqlDataAdapter 

    [...] 

Private Sub dgv_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellValueChanged 
    ValueChanged = True 
End Sub 

//not sure this one is still usefull, i'm still working on this stuff :) 
Private Sub dgv_RowValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.RowValidated 
    If ValueChanged Then 
     ValueChanged = False 
     da.Update(dt) 
    End If 
End Sub 

Private Sub dgv_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv.SelectionChanged 
    If ValueChanged Then 
     ValueChanged = False 
     Me.Validate() 
     da.Update(dt) 
    End If 
End Sub 
0

시도는 CellEndEdit 사용 :

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
     { 

try 
     { 
      da_em.Update(dt_em); 
      MessageBox.Show("Database updated."); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
      throw; 
     } 

     } 
+0

생각 : * 인용구 * 나는 CellEndEdit, CellLeave, CellValidated, CellValueChanged 및 SelectionChanged로 여러 이벤트를 시도했다. */quote * – daydr3amer

관련 문제