DataGrid Editabile
Andiamo ora ad analizzare come popolare da codice un Datagride 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 colonnecreate 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 commentatoper farvi capire le operazioni che stiamo facendo.
'creiamo una connessione a SQL2000Dim cn As New SqlConnection("Data Source=.;User ID=sa;Initial Catalog=Northwind")'istanziamo un data adapter e gli passiamo la command e la connectionDim da As New SqlDataAdapter("SELECT TOP 15 CustomerID, CompanyName, ContactName, Fax FROM Customers" , cn)'istanziamo un dataset che terrà al suo interno i datiDim ds As New DataSetPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadIf Not IsPostBack Then' al page_load se la pagina non è in post back provvediamo a far caricare i dati al nostro dataserda.Fill(ds, "Customers")' e poi passiamo gli stessi al datagrid e facciamo il databinddgCustomers.DataSource = ds.Tables("Customers")dgCustomers.DataBind()End IfEnd SubPrivate 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 dbda.Fill(ds, "Customers")dgCustomers.DataSource = ds.Tables("Customers")dgCustomers.DataBind()'ora segnaliamo al datagrid quale è la riga da mettere in edit e lo selezioniamodgCustomers.EditItemIndex = e.Item.ItemIndexdgCustomers.DataSource = ds.Tables("Customers")dgCustomers.DataBind()dgCustomers.SelectedIndex = e.Item.ItemIndexEnd SubPrivate 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 selezioneda.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 bottoniDim sCampi(5) As StringsCampi(0) = ""sCampi(1) = ""For i = 2 To 5Dim txt As TextBox = CType(e.Item.Cells(i).Controls(0), TextBox)sCampi(i) = txt.Texttxt = NothingNext'ora assegniamo ai campi del datarow i valori presi dal Datagrid in locale sul dataset'per poi provvedere a fare l'updateriga("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 = -1dgCustomers.DataSource = ds.Tables("Customers")dgCustomers.DataBind()End SubPrivate 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'updateda.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 vederequanto è facile editare la stessa.