2014-01-14 2 views
0

아래의 절차를 수행하면 my DataGrid의 확인란을 선택하여 한 번에 여러 레코드를 삭제할 수있었습니다. 이 절차는 ASP.net에서 작성되었지만 이제는 VB.net에서 winform을 사용하고 있습니다.SQL에서 바인딩 된 여러 레코드 삭제 Datagrid

확인란이있는 열 이름이 "삭제"인 DataGrid가 있습니다. 사용자는 삭제하고자하는 레코드를 으로 확인하고 해당 레코드를 삭제합니다. 내 쿼리의 매개 변수로 "티켓 번호"열 값을 사용합니다.

내가 가진 문제는 ASP.Net 용으로 작성 되었기 때문에이 라인에 대한의 WinForm VB.net 동등한 방법, 내가 찾을 수 있다는 것입니다 :의 FindControl는 System.Windows.Forms의 멤버

Dim chkDelete As CheckBox = DirectCast(grdRoster.Rows(i).Cells(0).FindControl("Delete_Row"), CheckBox) 

하지

.DataGridViewCell. 게다가 체크 박스가 이 ColumnType : DataGridViewCheckBoxColumn으로 설정된 DataGrid 열에 있고 실제로 개별 컨트롤이 아니기 때문에 전체 라인이 잘못되었다고 확신합니다.

winform에서 어떻게 동일한 결과를 얻을 수 있습니까? 여기 내 전체 코드가있다. 런타임에 DataGridViewCheckBoxColumn을 만들어야합니다 데이터 바인딩의 gridview에서 여러 레코드를 삭제

Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click 

     'Create String Collection to store 
     'IDs of records to be deleted 

     Dim ticketNumberCollection As New StringCollection() 
     Dim strTicketNumber As String = String.Empty 

     'Loop through GridView rows to find checked rows 

     For i As Integer = 0 To grdRoster.Rows.Count - 1 

      Dim chkDelete As CheckBox = DirectCast(grdRoster.Rows(i).Cells(0).FindControl("Delete_Row"), CheckBox) 

      If chkDelete IsNot Nothing Then 
       If chkDelete.Checked Then 
        strTicketNumber = grdRoster.Rows(i).Cells(1).ToString 
        ticketNumberCollection.Add(strTicketNumber) 
       End If 
      End If 

     Next 

     'Call the method to Delete records 
     DeleteMultipleRecords(ticketNumberCollection) 

     ' rebind the GridView 
     grdRoster.DataBind() 

    End Sub 

    ' Sub to delete multiple records 
    ' @param "idCollection" calls the string collection above 
    ' and deletes the selected record separated by "," 

    Private Sub DeleteMultipleRecords(ByVal ticketNumberCollection As StringCollection) 

     Dim IDs As String = "" 

     'Create string builder to store 
     'delete commands separated by , 

     For Each id As String In ticketNumberCollection 

      IDs += id.ToString() & "," 

     Next 

     Try 
      Dim strTicketID As String = IDs.Substring(0, IDs.LastIndexOf(",")) 

      DataSheetTableAdapter.DeleteRecord(strTicketID) 

     Catch ex As Exception 

      Dim errorMsg As String = "Error in Deletion" 
      errorMsg += ex.Message 
      Throw New Exception(errorMsg) 

     Finally 

      Me.Close() 


     End Try 
    End Sub 
+0

위의 코드는 이미 삭제할 레코드를 식별하고 처리합니다. 정확히 무엇이 오류나 문제입니까? 왜 ASP.NET 코드를 번역하고 싶습니까? 어디로 갈 건데? – NoChance

+0

@EmmadKareem은 winform으로 들어갑니다. FindControl은 시스템의 멤버가 아닙니다. Windows.Forms.Datagrid –

+0

물론 내 질문은 번역 문제를 제쳐두고 남겨두고 싶은 프로그램에 대한 것입니다. 왜이 라인이 필요한가요? 어떤 가치가 있습니까? – NoChance

답변

1

Dim chk As New DataGridViewCheckBoxColumn() 
      DataGridView1.Columns.Add(chk) 
      chk.HeaderText = "Select" 

'다음 데이터 세트로 DataGridView에 바인딩

Dim sql As String = "SELECT * FROM table_name" 
    ' Dim connection As New SqlConnection(connectionString) 
    conn.Open() 
    sCommand = New SqlCommand(sql, conn) 
    sAdapter = New SqlDataAdapter(sCommand) 
    sBuilder = New SqlCommandBuilder(sAdapter) 
    sDs = New DataSet() 
    sAdapter.Fill(sDs, "table_name") 
    sTable = sDs.Tables("table_name") 

DataGridView1.DataSource = sDs.Tables("table_name") 
'각을 통해 통과 확인 된 값을 가져 오십시오.

Try 
     DataGridView1.EndEdit() 
     For j = Me.DataGridView1.Rows.Count - 1 To 0 Step -1 
      If Not IsDBNull(DataGridView1.Rows(j).Cells(0).Value) Then 
       If DataGridView1.Rows(j).Cells(0).Value = True Then 
        check = True 
        If MessageBox.Show("Do you want to delete these records?", "Delete", MessageBoxButtons.YesNo) = DialogResult.Yes Then 
         For i = Me.DataGridView1.Rows.Count - 1 To 0 Step -1 
          If Not IsDBNull(DataGridView1.Rows(i).Cells(0).Value) Then 
           If DataGridView1.Rows(i).Cells(0).Value = True Then 

           'remove the checked columns and update datatable 
            DataGridView1.Rows.RemoveAt(i) 
            sAdapter.Update(sTable) 
           End If 
          End If 
         Next 
        Else 
         Return 
        End If 
       Else 
       End If 
      End If 
     Next 
     If check = False Then 
      MsgBox("Nothing Selected") 
     End If 

       Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 
+0

좋은 답변 - .Cells (0)이 .Cells ("Select")로 코딩 된 경우 조금 더 명확합니다. – rheitzman