2016-07-12 5 views
0

Ich habe eine Datagridview, die Daten aus der Datenbank anzeigt. In jeder Zeile habe ich eine Schaltfläche mit dem Textwert "Approve" hinzugefügt. Wenn der Benutzer auf diese Schaltfläche klickt, möchte ich, dass die genehmigte Spalte in der Datenbank von 0 auf 1 geändert wird. Meine Frage ist, woher weiß ich, auf welche Schaltfläche in welcher Zeile geklickt wird. wie, "UPDATE request SET approved=1 WHERE ID=???". und ich möchte die Auto-Inkrement-ID-Spalte in der Datagridview für den Benutzer nicht anzeigen.Wie bekomme ich Spalte ("ID") Wert von Datagridview mit Visual Basic. NET

+0

Spalten auf der Datagridview könnte ‚versteckte‘ http://stackoverflow.com/questions/15090093/how-can-i-hide-a-specific-column-form-a-datagridview – Steve

+0

ja gemacht werden, Ich kann sie verstecken. Was ich will, ist, den ID-Wert der ausgewählten Spalte zu erhalten, ohne die ID-Spalte für den Benutzer anzuzeigen. – ufancha

+0

Ich verstehe es dann nicht. Wenn die ID-Spalte ausgeblendet ist, kann Ihr Benutzer sie nicht sehen. Was habe ich nicht verstanden? – Steve

Antwort

0

Dies sollte Ihnen eine allgemeine Idee geben. Es verwendet SQLite, aber Sie können jede beliebige Datenbank sub. Ich habe auch einen generischen Indexspaltennamen für den DGV verwendet. Sie können natürlich auch den Bestätigungsdialog weglassen.

Private Sub Mydgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Mydgv.CellContentClick 
    If TypeOf DirectCast(sender, DataGridView).Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso e.RowIndex >= 0 Then 
     Select Case e.ColumnIndex 
      Case Mydgv.Columns("ApproveButton_Col_Name").Index 
       Dim dr As DialogResult = MessageBox.Show("Are you sure you want to approve this?", "Confirm Approval", MessageBoxButtons.YesNo, MessageBoxIcon.Question) 
       If dr = Windows.Forms.DialogResult.Yes Then 
        Dim cmd As SQLiteCommand = conData.CreateCommand 
        cmd.CommandText = "Update request set Approved = 1 WHERE ID = " & CInt(Mydgv.Rows(e.RowIndex).Cells("MyIndex_Col_Name").Value) 
        Dim rst As Integer 
        rst = cmd.ExecuteNonQuery() 
        If rst <> 0 Then 
         'success 
        Else 
         'failure 
        End If 
       End If 
     End Select 
    End If 

End Sub 
+0

das ist genial. danke – ufancha

+0

Gern geschehen. Bitte akzeptieren Sie die Antwort, wenn es für Sie funktioniert. – topshot