Antonio Feliziani
a- a+

DataGrid Editabile

Andiamo ora ad analizzare come popolare da codice un Datagrid e come renderlo Editabile.

Prima di tutto inseriamo il nostro datagrind nella pagina .Aspx dalla barra dei componenti, poi dal property builder

selezioniamo la scheda colums e aggiungiamo alle colonne create runtime i colomn botton Select e Edit/Udate/Cancel
come si vede nell'immagine sottostante.

ora andiamo nella nostra pagina aspx.vb

e inseriamo il seguente codice già da me commentato per farvi capire le operazioni che stiamo facendo.

    'creiamo una connessione a SQL2000
Dim cn As New SqlConnection("Data Source=.;User ID=sa;Initial Catalog=Northwind")
'istanziamo un data adapter e gli passiamo la command e la connection
Dim da As New SqlDataAdapter("SELECT TOP 15 CustomerID, CompanyName, ContactName, Fax FROM Customers" , cn)
'istanziamo un dataset che terrà al suo interno i dati
Dim ds As New DataSet

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
' al page_load se la pagina non è in post back provvediamo a far caricare i dati al nostro dataser
da.Fill(ds, "Customers")
' e poi passiamo gli stessi al datagrid e facciamo il databind
dgCustomers.DataSource = ds.Tables("Customers")
dgCustomers.DataBind()
End If
End Sub

Private Sub dgCustomers_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgCustomers.EditCommand
'al comando edit provvediamo d nuovo a popolare..o meglio aggiornare il db
da.Fill(ds, "Customers")
dgCustomers.DataSource = ds.Tables("Customers")
dgCustomers.DataBind()
'ora segnaliamo al datagrid quale è la riga da mettere in edit e lo selezioniamo
dgCustomers.EditItemIndex = e.Item.ItemIndex
dgCustomers.DataSource = ds.Tables("Customers")
dgCustomers.DataBind()
dgCustomers.SelectedIndex = e.Item.ItemIndex
End Sub

Private Sub dgCustomers_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgCustomers.UpdateCommand
'quando l'utente clicca sul pulsante aggiorna provediamo a prendere l'indice
'dove era stato fatto l'edit e quindi la selezione
da.Fill(ds, "Customers")
Dim riga As DataRow = ds.Tables("Customers").Rows(dgCustomers.SelectedIndex)
Dim i As Integer
'ora cicliamo i campi editati del DataGrid scartando i primi due che sono quelli
'dove risiedono i bottoni
Dim sCampi(5) As String
sCampi(0) = ""
sCampi(1) = ""
For i = 2 To 5
Dim txt As TextBox = CType(e.Item.Cells(i).Controls(0), TextBox)
sCampi(i) = txt.Text
txt = Nothing
Next
'ora assegniamo ai campi del datarow i valori presi dal Datagrid in locale sul dataset
'per poi provvedere a fare l'update
riga("CustomerID") = sCampi(2)
riga("CompanyName") = sCampi(3)
riga("ContactName") = sCampi(4)
riga("Fax") = sCampi(5)
Dim Pippo As New SqlCommandBuilder(da)
da.Update(ds, "Customers")
dgCustomers.EditItemIndex = -1
dgCustomers.DataSource = ds.Tables("Customers")
dgCustomers.DataBind()
End Sub

Private Sub dgCustomers_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgCustomers.CancelCommand
'quando l'utente clicca sul pulsante elimina provediamo a prendere l'indice
'dove era stato fatto l'edit e quindi la selezione e cancella la riga selezionata
'prima in locale nel dataset poi fà l'update
da.Fill(ds, "Customers")
dgCustomers.DataSource = ds.Tables("Customers")
dgCustomers.DataBind()
Dim riga As DataRow = ds.Tables("tab_contatti").Rows(dgCustomers.SelectedIndex)
riga.Delete()
Dim Pippo As New SqlCommandBuilder(da)
da.Update(ds, "Customers")
dgCustomers.DataSource = ds.Tables("Customers")
dgCustomers.DataBind()
End Sub

 



a questo punto possiamo eseguire la nostra pagina e vedere quanto è facile editare la stessa.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Staff
Ti interessano altri articoli su questo argomento?
Chiedi alla nostra Redazione!