Pagina 4 di 5 primaprima ... 2 3 4 5 ultimoultimo
Visualizzazione dei risultati da 31 a 40 su 48

Discussione: Edit in un DataGrid

  1. #31
    basta che aggiungi al comando la proprietà SelectedIndex="<%# ViewState["nomeviewstate"] %>" dove nomeviewstate è la ViewState che hai (in qualche modo) impostato precedentemente con l'indice dell'elemento selezionato.
    In ogni caso Trinità, la tua soluzione è pittosto ovvia e va non bene ma benissimo, c'è però da dire che "bindando" un comando in questo modo devi associarlo per forza ad un DataSet, cosa abbastanza sconveniente. Usando invece la soluzione che ti ho proposto puoi tranquillamente fare tutto con un DataReader, e riempire quindi la DropDownList a forza di Items.Add iterati dentro un ciclo di lettura. Inoltre questo metodo consente di creare DropDownList datadriven "a cascata" (come ad esempio una che ti consente di selezionare le nazioni ed un'altra che ti fa scegliere le province, se scegli Italia compaiono le provincie italiane, se scegli USA gli stati statunitensi e cosi via), sempre all'interno di un oggetto repeater (o Data... etc).
    Inoltre, proprio a riguardo del SeletedIndex, puoi utilizzare la proprietà in questione solo indicando il numero dell'indice selezionato, ma se non disponessi di questo numero è avessi solo il valore (di tipo stringa) restituito dalla precedente selezione? Non potresti "cercarlo" nella DropDownList con SelectedIndex. Se è questo il tuo caso fammi sapere...

  2. #32
    beh inanzitutto un grazie a tè aiuolameccanica

    concordo che un datareader scorre + velocemente i record e puoi popolare a cascata etc etc , ma potrei necessita anche di connessione aperte (che poi si devono chiudere) che io vorrei evitare. LA mia idea era quella del dataset che poi metto in cache così lo tiro sù una volta ogni tanto tipo cache("c_dataste")=dataset
    e poi controllo che non sia nothing....

    Pensavo nella pagina in cui aggiungo elementi alla tendina (elenco clienti) che quando si entra in quella pagina e si modifica qualche cosa setto a nothing la cache con dentro il dataset, così quando si entra nella pagina di prima o ho i vantaggi della cache, oppure devo ricreare il dataset (ma è poca roba, sarà una colonna da al massimo 20 nomi) una volta tanto (cambiamenti molto poco frequenti)
    ------------------------------------------------------------------
    Inoltre, proprio a riguardo del SeletedIndex, puoi utilizzare la proprietà in questione solo indicando il numero dell'indice selezionato, ma se non disponessi di questo numero è avessi solo il valore (di tipo stringa) restituito dalla precedente selezione? Non potresti "cercarlo" nella DropDownList con SelectedIndex. Se è questo il tuo caso fammi sapere...
    penso sia proprio il mio caso ....
    il dropdownlist visualizza un'elenco di clienti (tirati sù da una tabella di DB) supponiamo :
    Fiat
    Montedison
    RAi
    Canale5

    nel mio datagrid supponiamo che la riga che voglio modificare abbia come cliente RAI

    quando vado in edit riesco a caricare i valori di prima nel DDL(dropdownlist) ma ovviamente il valore "selezionato" è Fiat perchè non c'è specifiacato niente.
    Mentre a mè serve che si riempia la DDL ma con selezionato RAI.

    tradotto in HTML

    deve venire fuori

    <option value="fiat" selected>FIAT</option>
    Frate Priore: "È Lucifero in persona!"
    Trinità: "Lo conosci?"
    Bambino: "Mai sentito nominare, deve essere un professionista dell'est"

  3. #33
    x Trinità controlla i messaggi personali.

  4. #34
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    257

    AIUTO !!!

    A me però non mi avete mica aiutato

  5. #35
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    257
    davvero nessuno sa aiutarmi?

  6. #36
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    X Calias
    Prova a mettere nel PageLoad:
    If not IsPostBack then
    BindGrid()
    End if
    L'errore classico in questi casi è che prima di fare l'update vengono associati i dati alla griglia, di conseguenza salvi i dati che hai appena pescato dal database.
    Fammi sapere.
    Ciao
    Legnetto

  7. #37
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    257
    il fatto è che l'ho messo.
    Forse è meglio che vi posto tutto il code-behind.

    ripeto, funziona tutto
    sia il delete che il cancel che l'edit
    (gli ultimi due obbiettivamente non è che siano difficili),
    l'update no e il
    Response.Write(MyCommand.Parameters(Cols(I - 1)).Value & "
    " & Server.HtmlEncode(ColValue) & "
    ")
    riporta tutti i dati esatti, ma il db non si aggiorna


    scusate se vi sto facendo perdere tempo,
    ma davvero sto sbattendo da giorni senza
    trovare una soluzione.

    in ogni caso grazie legnetto


    Imports System
    Imports System.Web
    Imports System.Web.UI
    Imports System.Web.UI.Control
    Imports System.Data
    Imports System.Data.OleDb

    Public Class DefaultClass
    Inherits System.Web.UI.Page

    Protected WithEvents MyDataGrid As System.Web.UI.WebControls.DataGrid
    Protected WithEvents Cliente_ID As System.Web.UI.WebControls.TextBox
    Protected WithEvents NCPegasus As System.Web.UI.WebControls.TextBox
    Protected WithEvents Cliente As System.Web.UI.WebControls.TextBox
    Protected WithEvents Contatti As System.Web.UI.WebControls.TextBox
    Protected WithEvents Email As System.Web.UI.WebControls.TextBox
    Protected WithEvents Aggiungi As System.Web.UI.WebControls.Button
    Protected WithEvents Message As HtmlContainerControl

    Private MyConnection As OleDbConnection = _
    New OleDbConnection(ConfigurationSettings.AppSettings( "DSN"))
    Public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If Not (IsPostBack) Then
    BindGrid()
    End If
    End Sub

    Public Sub Add_Grid(ByVal obj As Object, ByVal E As EventArgs)

    Dim DS As DataSet
    Dim MyCommand As OleDbCommand

    If NCPegasus.Text = "" Or Cliente.Text = "" Or Contatti.Text = "" Or Email.Text = "" Then
    Message.InnerHtml = "ERROR: Null values not allowed for Author ID, Name or Phone"
    Message.Style("color") = "red"
    BindGrid()
    End If

    Dim InsertCmd As String = "INSERT INTO tblClienti ( NCPegasus, Cliente, Contatti, Email )VALUES ([@NCPegasus], [@Cliente], [@Contatti], [@Email]);"

    MyCommand = New OleDbCommand(InsertCmd, MyConnection)

    MyCommand.Parameters.Add(New OleDbParameter("@NCPegasus", OleDbType.Integer, 5))
    MyCommand.Parameters("@NCPegasus").Value = Server.HtmlEncode(NCPegasus.Text)
    MyCommand.Parameters.Add(New OleDbParameter("@Cliente", OleDbType.LongVarChar, 255))
    MyCommand.Parameters("@Cliente").Value = Server.HtmlEncode(Cliente.Text)
    MyCommand.Parameters.Add(New OleDbParameter("@Contatti", OleDbType.LongVarChar, 255))
    MyCommand.Parameters("@Contatti").Value = Server.HtmlEncode(Contatti.Text)
    MyCommand.Parameters.Add(New OleDbParameter("@Email", OleDbType.LongVarChar, 50))
    MyCommand.Parameters("@Email").Value = Server.HtmlEncode(Email.Text)

    MyCommand.Connection.Open()
    Try
    MyCommand.ExecuteNonQuery()
    Message.InnerHtml = "Record Added
    " & InsertCmd.ToString()
    Catch Exp As OleDbException
    If Exp.ErrorCode = 2627 Then
    Message.InnerHtml = "ERROR: A record already exists with the same primary key"
    Else
    Message.InnerHtml = "ERROR: Could not add record, please ensure the fields are correctly filled out"
    End If
    Message.Style("color") = "red"
    End Try
    MyCommand.Connection.Close()

    BindGrid()

    End Sub

    Public Sub Edit_Grid(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)
    MyDataGrid.EditItemIndex = CInt(e.Item.ItemIndex)
    BindGrid()
    End Sub

    Public Sub Cancel_Grid(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)
    MyDataGrid.EditItemIndex = -1
    BindGrid()
    End Sub

    Public Sub Update_Grid(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)

    Dim DS As DataSet
    Dim MyCommand As OleDbCommand

    Dim UpdateCmd As String = "UPDATE tblClienti SET NCPegasus=[@NCPegasus], Cliente=[@Cliente], Contatti=[@Contatti], Email=[@Email] WHERE cliente_ID=[@cliente_ID];"

    MyCommand = New OleDbCommand(UpdateCmd, MyConnection)

    MyCommand.Parameters.Add(New OleDbParameter("@Cliente_ID", OleDbType.Numeric))
    MyCommand.Parameters.Add(New OleDbParameter("@NCPegasus", OleDbType.Numeric))
    MyCommand.Parameters.Add(New OleDbParameter("@Cliente", OleDbType.LongVarChar))
    MyCommand.Parameters.Add(New OleDbParameter("@Contatti", OleDbType.LongVarChar))
    MyCommand.Parameters.Add(New OleDbParameter("@Email", OleDbType.LongVarChar))

    MyCommand.Parameters("@cliente_ID").Value = MyDataGrid.DataKeys(CInt(e.Item.ItemIndex))

    Dim Cols As String() = {"@Cliente_ID", "@NCPegasus", "@Cliente", "@Contatti", "@Email"}

    Dim NumCols As Integer = e.Item.Cells.Count

    MyCommand.Parameters("@NCPegasus").Value = Server.HtmlEncode(e.Item.Cells(2).Text)
    MyCommand.Parameters("@Cliente").Value = Server.HtmlEncode(e.Item.Cells(3).Text)
    MyCommand.Parameters("@Contatti").Value = Server.HtmlEncode(e.Item.Cells(4).Text)
    MyCommand.Parameters("@Email").Value = Server.HtmlEncode(e.Item.Cells(5).Text)
    Dim I As Integer
    For I = 2 To NumCols - 2
    Dim CurrentTextBox As TextBox
    CurrentTextBox = e.Item.Cells(I).Controls(0)

    Dim ColValue As String = CurrentTextBox.Text

    MyCommand.Parameters(Cols(I - 1)).Value = Server.HtmlEncode(ColValue)
    Response.Write(MyCommand.Parameters(Cols(I - 1)).Value & "
    " & Server.HtmlEncode(ColValue) & "
    ")

    Next

    MyCommand.Connection.Open()

    Try
    MyCommand.ExecuteNonQuery()
    Message.InnerHtml = "Record Updated
    " & UpdateCmd.ToString()
    MyDataGrid.EditItemIndex = -1
    Catch Exp As OleDbException
    If Exp.ErrorCode = 2627 Then
    Message.InnerHtml = "ERROR: A record already exists with the same primary key"
    Else
    Message.InnerHtml = "ERROR: Could not add record, please ensure the fields are correctly filled out"
    End If
    Message.Style("color") = "red"
    End Try

    MyCommand.Connection.Close()

    BindGrid()
    End Sub

    Public Sub Delete_Grid(ByVal Sender As Object, ByVal E As DataGridCommandEventArgs)

    Dim MyCommand As OleDbCommand
    Dim DeleteCmd As String = "DELETE * FROM tblClienti WHERE cliente_ID=[@cliente_ID];"

    MyCommand = New OleDbCommand(DeleteCmd, MyConnection)
    MyCommand.Parameters.Add(New OleDbParameter("@Cliente_ID", OleDbType.Numeric))
    MyCommand.Parameters("@Cliente_ID").Value = MyDataGrid.DataKeys(CInt(E.Item.ItemIndex))

    MyCommand.Connection.Open()

    Try
    MyCommand.ExecuteNonQuery()
    Message.InnerHtml = "Record Deleted
    " & DeleteCmd
    Catch Exc As OleDbException
    Message.InnerHtml = "ERROR: Could not delete record"
    Message.Style("color") = "red"
    End Try

    MyCommand.Connection.Close()

    BindGrid()
    End Sub

    Public Sub ItemDataBound_Grid(ByVal Sender As Object, ByVal E As DataGridItemEventArgs)
    If (E.Item.ItemType = ListItemType.EditItem) Then
    Dim i As Integer
    Try
    For i = 2 To E.Item.Controls.Count - 1
    If (E.Item.Cells(i).Controls(0).GetType().ToString = "System.Web.UI.WebControls.TextBox") Then
    Dim tb As TextBox
    tb = E.Item.Controls(i).Controls(0)
    tb.Text = Server.HtmlDecode(tb.Text)
    End If
    Next
    Catch
    End Try
    End If
    End Sub

    Public Sub BindGrid()

    Dim DS As DataSet
    Dim MyCommand As OleDbDataAdapter

    MyCommand = New OleDbDataAdapter("select * from tblClienti", MyConnection)

    DS = New DataSet()
    MyCommand.Fill(DS, "tblClienti")

    MyDataGrid.DataSource = DS.Tables("tblClienti").DefaultView
    MyDataGrid.DataBind()

    End Sub

    End Class

  8. #38
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    257

    ERRATA CORRIGE

    scusate c'è un rimasuglio delle mie precedenti prove
    MyCommand.Parameters("@NCPegasus").Value = Server.HtmlEncode(e.Item.Cells(2).Text)
    MyCommand.Parameters("@Cliente").Value = Server.HtmlEncode(e.Item.Cells(3).Text)
    MyCommand.Parameters("@Contatti").Value = Server.HtmlEncode(e.Item.Cells(4).Text)
    MyCommand.Parameters("@Email").Value = Server.HtmlEncode(e.Item.Cells(5).Text)
    tolto il quale non cambia nulla

  9. #39
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Mi sa che sbagli qualche tipo di dato nella update.
    Prova a mettere manualmente i dati nel codice e prova a fare l'aggiornamento.
    Io uso sql 2000 e di conseguenza non conosco bene il tuo db però se c'è il modo fai una response.write della stringa di aggiornamento e provala direttamente.
    Così dovresti vedere se i tipi sono giusti.
    Ciao

  10. #40
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    257
    in effetti se eseguo la semplice stringa sql
    UPDATE tblClienti SET NCPegasus=1111111111, Cliente=aaaaaaaaa, Contatti=bbbbbbbbbb, Email=ccccccccccc WHERE cliente_ID=[@cliente_ID];

    mi funziona,
    ma appena mi azzardo a parametrizzare un solo
    dei rimanenti campi (non Cliente_ID che è parametro chiave)
    non funziona.
    Per darti maggiori informazioni in modo da potermi aiutare
    ti posso dire che:
    1) il db a cui mi collego è Access
    2) il campo chiave come ho già detto è cliente_ID ed è contatore
    3) il campo Pegasus è numerico (intero lungo)
    4) tutti gli altri sono testo (255,255 e 50)

    ho provato a cambiare Pegasus in testo ma non cambia nulla
    e il delete cancel ed edit li fa lo stesso


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.