c#/vb.net DataGridView 추가된행/삭제된행/수정된행만 접근하기

2019. 9. 11. 13:24C#

728x90
반응형


DataGridView를 작업 하다보면 필요한 작업이

삭제 된 건만 따로 접근하고,

수정 된 건만 따로 접근하고,

추가 된 건만 따로 접근해야 할 때가 생깁니다.

이럴 때 방법을 공유 합니다.

① DataGridView에서 추가/수정/삭제 된 행을 따로 담습니다.

Datatable의 GetChanges 라는 메서드를 이용하여 삭제 된 행을 복사본으로 가져옵니다.

 

C#

DataTable dtDel = dt.GetChanges(DataRowState.Deleted); 
DataTable dtAdd = dt.GetChanges(DataRowState.Added); 
DataTable dtModi = dt.GetChanges(DataRowState.Modified);

 

 

VB.NET

Dim dtDel As DataTable = dt.GetChanges(DataRowState.Deleted) 
Dim dtAdd As DataTable = dt.GetChanges(DataRowState.Added) 
Dim dtModi As DataTable = dt.GetChanges(DataRowState.Modified)

 

DataTable.GetChanges Method (System.Data)

마지막으로 로드되거나 가 호출된 후에 변경된 내용이 모두 들어 있는 의 복사본을 가져옵니다.

② 삭제, 추가, 수정 여부를 파악하여 동작을 수행 합니다.

foreach 문으로 datarow를 반복하며 DataRowState의 값이 Deleted 인 것일 때

DataRowVersion.Original

즉 삭제되기 전 원래의 값을 변수에 담고 활용할 수 있습니다.

 

C#

if (dtDel != null) 
{ 
     foreach (DataRow dr in dtDel.Rows) 
     { 
          if (dr.RowState == DataRowState.Deleted) 
          {
                // 삭제되기 전 값 
               var boforeValue = dr[0, DataRowVersion.Original]; 
               // 여기에 Delete Query 를 써도 됨. 
               // 나 같은 경우는 id값을 가져와 삭제를 했음. 
               delCnt += 1; 
          }
      }
 }

 

 

 

VB.NET

If Not (dtDel Is Nothing) Then

     For Each dr As DataRow In dtDel.Rows ' 삭제 된 행이라면? 

          If (dr.RowState = DataRowState.Deleted) Then 

               Dim beforeValue = Nothing 

               beforeValue = dr(0, DataRowVersion.Original) ' DELETE 구문 

               delcnt += 1 

          End If

     Next 

End if

 

 

DataRowVersion Enum (System.Data)

버전을 설명합니다.

③ 마지막으로 Datable.AcceptChanges() 를 써서 반영 한다.

dt.AcceptChanges()

Datatable의 AcceptChanges() 는 테이블의 변동사항을 모두 커밋합니다.


<코드>

C#

 

VB.NET

' 각 각 상태에 따라 Datatable에 담음.
Dim dtDel As DataTable = dt.GetChanges(DataRowState.Deleted)
Dim dtAdd As DataTable = dt.GetChanges(DataRowState.Added)
Dim dtModi As DataTable = dt.GetChanges(DataRowState.Modified)

If Not (dtDel Is Nothing) Then
    For Each dr As DataRow In dtDel.Rows
        ' 삭제 된 행이라면?
        If (dr.RowState = DataRowState.Deleted) Then
            Dim beforeValue As Object = Nothing
            beforeValue = dr(0, DataRowVersion.Original)
            ' DELETE 구문
            delcnt += 1
        End If
    Next
ElseIf Not (dtAdd Is Nothing) Then
    For Each dr As DataRow In dtAdd.Rows
        ' 추가 된 행이라면?
        If (dr.RowState = DataRowState.Added) Then
            ' insert 구문
            addcnt += 1
        End If
    Next
ElseIf Not (dtModi Is Nothing) Then
    For Each dr As DataRow In dtModi.Rows
        ' 수정 된 행이라면?
        If (dr.RowState = DataRowState.Modified) Then
            ' update 구문
            Dim sql_modi As String
            modicnt += 1
        End If
    Next
End If

dt.AcceptChanges()

#datagridview

#dataGridview추가수정삭제

#datatable추가수정삭제

#datatable삭제된행

#datatable삭제된것만

#vbnet

#csharp

 

 

728x90
반응형

'C#' 카테고리의 다른 글

C#/VB.NET DataGridView CheckBox Column 만들기  (0) 2019.12.25
C#/VB.NET AsEnumerable은 DataTable의 멤버가 아닙니다.  (0) 2019.12.18
C# Selenium Span 값 읽기  (0) 2019.06.14
C# Selenium 도전 2장  (1) 2019.06.14
C# Selenium 도전 1장  (0) 2019.06.14