2010-05-29 19 views
1

J'essaie de mettre à jour une ligne dans DataGrid mais le problème est que je ne peux même pas changer les valeurs de ses cellules. j'avais mis mon DataGrid AllowUpdate propriété sur true, mais je ne peux pas encore modifier les valeurs des cellules:Impossible de mettre à jour des cellules dans datagrid dans vb6

Option Explicit 
Dim conn As New ADODB.Connection 
Dim cmd As New ADODB.Command 
Dim recordset As New ADODB.recordset 
Public Action As String 
Public Person_Id As Integer 
Public Selected_Person_Id As Integer 
Public Phone_Type As String 

Public Sub InitializeConnection() 
Dim str As String 

str = _ 
    "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
    "Data Source=" + App.Path + "\phonebook.mdb;" & _ 
    "Persist Security Info=False" 

    conn.CursorLocation = adUseClient 

    If conn.state = 0 Then 
    conn.ConnectionString = str 



    conn.Open (conn.ConnectionString) 
    End If 

End Sub 
Public Sub AbandonConnection() 
    If conn.state <> 0 Then 
     conn.Close 
    End If 
End Sub 
Public Sub Persons_Read() 

    Dim qry_all As String 

    ' qry_all = "select * from person,web,phone Where web.personid = person.id And phone.personid = person.id" 
    qry_all = "SELECT * FROM person order by id" 

    Call InitializeConnection 

    cmd.CommandText = qry_all 
    cmd.CommandType = adCmdText 

    Set cmd.ActiveConnection = conn 


    If conn.state = 1 Then 

     Set recordset = cmd.Execute() 

    End If 

     BindDatagrid 


End Sub 

Private Function Person_Delete(id As Integer) 
    Dim qry_all As String 
    qry_all = "Delete * from person where person.id= " & id & " " 

    Call InitializeConnection 

    cmd.CommandText = qry_all 
    cmd.CommandType = adCmdText 

    Set cmd.ActiveConnection = conn 


    If conn.state = 1 Then 

     Set recordset = cmd.Execute() 

    End If 

     dg_Persons.Refresh 



End Function 
Private Function Person_Update() 

End Function 
Public Sub BindDatagrid() 



    Set Me.dg_Persons.DataSource = recordset 


    Me.dg_Persons.Refresh 
    dg_Persons.Columns(0).Visible = False 
    dg_Persons.Columns(4).Visible = False 

    dg_Persons.Columns(1).Caption = "Name" 


    dg_Persons.Columns(2).Caption = "Family" 
    dg_Persons.Columns(3).Caption = "Nickname" 
    dg_Persons.Columns(5).Caption = "Title" 
    dg_Persons.Columns(6).Caption = "Job" 

End Sub 
Public Function DatagridReferesh() 

    Call Me.Persons_Read 

End Function 

Private Sub cmd_Add_Click() 
    frm_Person_Add.Caption = "Add a new person" 
    frm_Person_Add.Show 



End Sub 

Private Sub cmd_Business_Click() 


    ' frm_Phone.Caption = "Business Phones" 
    frm_Phone.Phone_Type = "Business" 
    frm_Phone.Person_Id = Selected_Person_Id 

    frm_Phone.Tag = Selected_Person_Id 

    frm_Phone.Show 

End Sub 

Private Sub cmd_Delete_Click() 
    Dim msg_input As Integer 

    msg_input = MsgBox("Are you sure you want to delete this person ?", vbYesNo) 

    If msg_input = vbYes Then 
     Person_Delete Selected_Person_Id 
     MsgBox ("The person is deleted") 
     frm_Phone.DatagridReferesh 

    End If 

End Sub 

Private Sub cmd_Home_Click() 

    'frm_Phone.Caption = "Home Phones" 
    frm_Phone.Phone_Type = "Home" 
    frm_Phone.Person_Id = Selected_Person_Id 
    frm_Phone.Tag = Selected_Person_Id 

    frm_Phone.Show 

End Sub 

Private Sub cmd_Update_Click() 
    If Not Selected_Person_Id = 0 Then 
    frm_Person_Edit.Person_Id = Selected_Person_Id 
    frm_Person_Edit.Show 
    Else 
    MsgBox "No person is selected" 

    End If 


End Sub 


Public Function AddParam(name As String, param As Variant, paramType As DataTypeEnum) As ADODB.Parameter 
    If param = "" Or param = Null Then 
     param = " " 
    End If 
    Dim objParam As New ADODB.Parameter 
    Set objParam = cmd.CreateParameter(name, paramType, adParamInput, Len(param), param) 
    objParam.Value = Trim(param) 
    Set AddParam = objParam 

End Function 


Private Sub Command1_Click() 
    DatagridReferesh 
End Sub 

Private Sub Command2_Click() 
    frm_Internet.Person_Id = Selected_Person_Id 
    frm_Internet.Show 

End Sub 

Private Sub dg_Persons_BeforeColEdit(ByVal ColIndex As Integer, ByVal KeyAscii As Integer, Cancel As Integer) 


    ' MsgBox ColIndex 

' dg_Persons.Columns(ColIndex).Text = "S" 
' dg_Persons.Columns(ColIndex).Locked = False 
' dg_Persons.Columns(ColIndex).Text = "" 
'dg_Persons.Columns(ColIndex).Value = "" 

     'Person_Edit dg_Persons.Columns(0).Value, dg_Persons.Columns(1).Value, dg_Persons.Columns(2).Value,dg_Persons.Columns(3).Value,dg_Persons.Columns(4).Value, dg_Persons.Columns(5).Value 

End Sub 

Private Sub dg_Persons_BeforeColUpdate(ByVal ColIndex As Integer, OldValue As Variant, Cancel As Integer) 
    MsgBox ColIndex 
End Sub 



Private Sub dg_Persons_Click() 


If dg_Persons.Row <> -1 Then 
    dg_Persons.SelBookmarks.Add Me.dg_Persons.RowBookmark(dg_Persons.Row) 

    Selected_Person_Id = Val(dg_Persons.Columns(0).Value) 
End If 

End Sub 


Private Sub Form_Load() 

    ' dg_Persons.AllowUpdate = True 
    ' dg_Persons.EditActive = True 
    Call Persons_Read 

    dg_Persons.AllowAddNew = True 
dg_Persons.Columns(2).Locked = False 

End Sub 
Private Function Person_Edit(id As Integer, name As String, family As String, nickname As String, title As String, job As String) 


InitializeConnection 




cmd.CommandText = "Update person set [email protected] , [email protected] , [email protected] , title [email protected] , [email protected] where id= " & id & "" 
    cmd.Parameters.Append AddParam("name", name, adVarChar) 
    cmd.Parameters.Append AddParam("family", family, adVarChar) 
    cmd.Parameters.Append AddParam("nickname", nickname, adVarChar) 
    cmd.Parameters.Append AddParam("title", title, adVarChar) 
    cmd.Parameters.Append AddParam("job", job, adVarChar) 


    cmd.ActiveConnection = conn 
    cmd.CommandType = adCmdText 


    cmd.Execute 

End Function 
Private Function Person_Search(q As String) 
    Dim qry_all As String 


    qry_all = "SELECT * FROM person where person.name like '%" & q & "%' or person.family like '%" & q & "%' or person.nickname like '%" & q & "%'" 


    Call InitializeConnection 

    cmd.CommandText = qry_all 
    cmd.CommandType = adCmdText 

    Set cmd.ActiveConnection = conn 


    If conn.state = 1 Then 

     Set recordset = cmd.Execute() 

    End If 

     BindDatagrid 

End Function 

Private Sub mnu_About_Click() 
    frm_About.Show 
End Sub 

Private Sub submnu_exit_Click() 
    End 
End Sub 


Private Sub txt_Search_Change() 
    Person_Search txt_Search.Text 
End Sub 

Répondre

0

Vous pouvez également utiliser la zone de texte flottant contrôle tour où vous placez la boîte un texte sur le dessus de la cellule souhaitée sur une grille afin de permettre à un utilisateur de éditer les données dans une grille.

http://www.thescarms.com/vbasic/editgrid.aspx

0

Je me rends compte que cette réponse est assez vieux, mais juste au cas où quelqu'un avait besoin cela, voici une solution. Fondamentalement, vous devez récupérer les données à afficher dans le DataGrid via un environnement de données (et une commande qui spécifie les données à afficher). Les instructions suivantes mettent à jour une grille de données nommée DataGrid1.

DataEnvironment1.rsCommand1.Requery 
Set DataGrid1.DataSource=DataEnvironment1 

DataEnvironment1 est un environnement de données contenant un élément de données (commande) Command1. (rsCommand1 est l'auto-généré ResultSet correspondant à Command1)

Ainsi, par exemple, vous pouvez mettre ces déclarations dans votre mise à jour événement onClick du bouton et voila, le datagrid se rafraîchit en temps réel!

0
Dim Para3, Para4 As String 
Para3 = "01-01-" & Combo1.Text 
Para4 = "31-12-" & Combo1.Text 
With DataEnvironment1 
If .Connection2.State <> 0 Then .Connection2.Close 
DoEvents 
.Connection2.Open 
.Command2 Para3, Para4 
Set DataGrid1.DataSource = .rsCommand2 
DataGrid1.ReBind 
End With 

J'ai essayé de sélectionner l'enregistrement avec des données entre l'aide de la requête. La première fois que j'ai eu le résultat, mais plus tard, il ne s'est pas rafraîchi. Maintenant, je suis capable de faire n'importe quelle action dynamiquement dans l'exécution, chaque fois que ma grille montre le résultat correspondant.