Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    detailsview: intercetto comando ma passa sopra al mio codice

    Nel codebehind intercetto il command di un detailsview in questo modo:
    codice:
    Protected Sub DetailsView1_ItemCommand(ByVal sender As Object, ByVal e As DetailsViewCommandEventArgs) Handles DetailsView1.ItemCommand
            Select Case e.CommandName
                Case DataControlCommands.InsertCommandName
                    If checkdata() Then
                        SqlDataSource2.Insert()
                    Else
                        Me.lblresult.Visible = "True"
                        Me.lblresult.Text = "Correggere e riprovare."
                    End If
    
    
                Case DataControlCommands.UpdateCommandName
                    If checkdata() Then
                        SqlDataSource2.Update()
                    Else
                        Me.lblresult.Visible = "True"
                        Me.lblresult.Text = "Correggere e riprovare."
                    End If
            End Select
        End Sub
    All'esecuzione del comando dovrebbe anteporre un controllo che viene fatto dalla funzione checkdata e se l'esito della funzione è true dovrebbe proseguire altrimenti mostrarmi l'errore in una label.
    Nella funzione ci entra e quando dà esito false fa anche la visualizzazione della label ma poi esegue anche l'insert (o l'update) indipendentemente dall'esito della funzione ... come faccio a impedirglielo?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    se va nella else non esegue l'insert...prova in debug e vedi se effettivamente la salta.

    forse riesegue la pagina per qualche motivo ?

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Ho risolto in maniera diversa (non ho il codice sottomano, mi pare di aver intercettato l'iteminserting e l'itemupdating separatamente anzichè l'itemcommand... non ricordo bene) comunque ti confermo che entrava nell'else e poi faceva anche l'insert :-(
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Non ho risolto un beneamato ....!
    Ora usando il codice che segue
    codice:
       Protected Sub DetailsView1_ItemInserting(ByVal sender As Object, ByVal e As DetailsViewInsertEventArgs) Handles DetailsView1.ItemInserting
            If checkdata() Then
                SqlDataSource2.Insert()
            Else
                Me.lblresult.Visible = "True"
                Me.lblresult.Text = "correggere e riprovare."
                e.Cancel = True
            End If
        End Sub
    effettivamente riesco a bloccare l'esecuzione dell'inserimento quando checkdata() restituisce false, però quando invece restituisce true, non so per quale motivo l'Insertcommand non si valorizza e mi da eccezione quando entra in esecuzione dell'insert (perchè in db ho alcuni campi NOT NULL quindi si incappera in inserimento)!

    Checkdata, oltre ai controlli su alcuni dati, fa il remove e l'add di un insertparameter così
    codice:
    tdata ='2012-12-31T00:00:00'
    SqlDataSource2.InsertParameters.Remove(SqlDataSource2.InsertParameters("imp_al"))
    SqlDataSource2.InsertParameters.Add("imp_al", TypeCode.DateTime, tdata)
    (forse la valorizzazione di un parameter da codice si può fare in altro modo ma questo mi pare che funzioni)....

    Sto stondando tutti gli spigoli dell'ufficio coi parietali ma non ne esco... sembra che l'unico modo per fargli fare l'insert sia rivalorizzargli, dentro alla funzione checkdata, TUTTI i valori degli insertparameter....
    Ma che scherza?
    Qualcuno mi spieghi, vi prego!
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    boh, prova ad estrarli da checkdata() e chiama una sub a parte...

    If checkdata() Then
    ValorizzaInsert()
    SqlDataSource2.Insert()

    altra cosa, sembra banale ma mettici "=true"

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Ma se devo diventare pazzo per rivalorizzare a forza gli insertparameter (e gli updataparameter, anche) è come usare i "potenti" mezzi di aspnet con la logica di asp 3.0... che cavolo di motivo ha quel cavolo di sqldatasource per perdersi quei cavolo di valori in quel cavolo di iteminserting?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    non si capisce bene, posta tutto il codice (usando i tag code)

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    un esempio vecchio che ho in archivio (con Access).

    codice:
     <asp:AccessDataSource ID="AccessDataSourceDipendenti" runat="server" 
            DataFile="mdb-database\timetable.mdb"
            SelectCommand="SELECT `ID`, `NOME`, `COGNOME`, `MANSIONE` FROM `tb_dipendenti`" 
            InsertCommand="INSERT INTO [tb_dipendenti](NOME, COGNOME, MANSIONE) VALUES (?,?,?)">
    
        <InsertParameters>
          <asp:Parameter Type="String" Name="NOME"></asp:Parameter>
          <asp:Parameter Type="String" Name="COGNOME"></asp:Parameter>
          <asp:Parameter Type="String" Name="MANSIONE"></asp:Parameter>
        </InsertParameters>    
     
        </asp:AccessDataSource>

    codice:
        Protected Sub btSalva_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btSalva.Click
            AccessDataSourceDipendenti.InsertParameters("NOME").DefaultValue = tbNome.Text.Trim.ToUpper
            AccessDataSourceDipendenti.InsertParameters("COGNOME").DefaultValue = tbCognome.Text.Trim.ToUpper
            AccessDataSourceDipendenti.InsertParameters("MANSIONE").DefaultValue = tbMansione.Text.Trim.ToUpper
            AccessDataSourceDipendenti.Insert()
    
            tbNome.Text = String.Empty
            tbCognome.Text = String.Empty
            tbMansione.Text = String.Empty
        End Sub

  9. #9
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    si ho capito, tu rivalorizzi il defaultvalue degli insertparameter, io elimino e ricreo il parametro valorizzandolo (ho una funzioncina che mi sveltisce l'operazione), nella sostanza non cambia: è solo che mi rompe dover andare a dirgli che valore prendersi per ogni parametro (ne ho un pacco) quando dovrebbe farlo da solo...
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    mi pare ci sia il modo di prendere i valori in automatico, cosi'

    codice:
                <InsertParameters>
                    <asp:ControlParameter ControlID="txtA" PropertyName="SelectedValue" Type="Int32"/>
                    <asp:ControlParameter ControlID="txtB" PropertyName="SelectedValue" Type="Int32"/>
                    <asp:ControlParameter ControlID="txtC" PropertyName="SelectedValue" Type="Int32"/>
                </InsertParameters>

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 © 2025 vBulletin Solutions, Inc. All rights reserved.