none
[.net 2.0 - c#] Eccezioni non gestite nella details view RRS feed

  • Domanda

  • Ciao ragazzi,

    ho un problema di cui non riesco a venire a capo. Ho inserito all'interno della mia pagina aspx un controllo details view in accoppiata con un sql source per effettuare l'inserimento su una tabella. 

    Funziona regolarmente se inserisco i dati giusti ma, se sbaglio ad inserirli, ad esempio li lascio vuoti, mi genera un'eccezione non gestita. Ho provato ad intercettarla in questo modo 

     

     void DetailsView1_OnItemInserting(DetailsViewInsertedEventArgs e) 
        {
       
            if (e.Exception != null) 
            {
                Label1.Text = e.Exception.Message;
                e.ExceptionHandled = true;
                e.KeepInInsertMode = true;
            }
        }
    

    ma non funziona.

    Noto che nell'elenco degli oggetti, il menu a tendina le file .cs, non mi compare la details view. 

     

    C'è un modo per intercettare l'eccezione?

     

    Grazie in anticipo

     

    mercoledì 26 ottobre 2011 20:23

Risposte

Tutte le risposte

    • Proposto come risposta Carmine Punella giovedì 27 ottobre 2011 09:12
    • Contrassegnato come risposta ciro.net giovedì 27 ottobre 2011 20:26
    giovedì 27 ottobre 2011 02:30
  • purtroppo non funziona. ho provato ad inserire quel codice nel file aspx ma niente da fare. ovviamente ho rinominato il metodo utilizzando l'id della mia details view

     

    altri consigli?

    giovedì 27 ottobre 2011 19:18
  • Prova a postare lo stack trace dell'exception, vediamo dove si verifica.
    Matteo Migliore

    Bloghttp://blogs.ugidotnet.org/matteomigliore
    Twitterhttp://twitter.com/matteomigliore
    CodePlex
    giovedì 27 ottobre 2011 19:28
  • ciao matteo,

     

    sono riuscito a fare qualcosa ma ho ancora problemi

    allora ti posto i pezzi di codice che uso

     

        <asp:DetailsView ID="DetailsView1" EmptyDataText="No records."  runat="server" AutoGenerateRows="False" DataKeyNames="ID_USER"
                DataSourceID="SqlDataSource1" DefaultMode="Insert" EnableModelValidation="True"
                Height="50px" Width="125px" OnItemInserting="DetailsView1_ItemInserting">
                <Fields>
                    <asp:BoundField DataField="USERNAME" HeaderText="USERNAME" SortExpression="USERNAME" />
                    <asp:BoundField DataField="PASSWORD" HeaderText="PASSWORD" SortExpression="PASSWORD" />
                    <asp:CommandField ShowInsertButton="True" ButtonType="Button" />
                </Fields>
            </asp:DetailsView>
    
    <br/>
    
     <script runat="server">
    
            void DetailsView1_ItemInserting(Object sender,
        DetailsViewInsertedEventArgs e)
      {
        // Use the Exception property to determine whether an exception
        // occurred during the insert operation.
        if (e.Exception == null && e.AffectedRows == 1)
        {
          // Use the Values property to get the value entered by 
          // the user for the CompanyName field.
          String name = e.Values["CompanyName"].ToString();
    
          // Display a confirmation message.
          //Label1.Text = name + " added successfully. ";
    
        }
        else
        {
          // Insert the code to handle the exception.
           // Label1.Text = e.Exception.Message;
    
          // Use the ExceptionHandled property to indicate that the 
          // exception is already handled.
          e.ExceptionHandled = true;
    
          // When an exception occurs, keep the DetailsView
          // control in insert mode.
          e.KeepInInsertMode = true;
        }
      }
    
    </script>
    

     

    Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente. 

    Messaggio di errore del compilatore: CS0123: Nessun overload di 'DetailsView1_ItemInserting' corrisponde al delegato 'System.Web.UI.WebControls.DetailsViewInsertEventHandler'.

    Errore nel codice sorgente:

     
    Riga 121:        
    Riga 122:                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    Riga 123:                <asp:DetailsView ID="DetailsView1" EmptyDataText="No records."  runat="server" AutoGenerateRows="False" DataKeyNames="ID_USER"
    Riga 124:            DataSourceID="SqlDataSource1" DefaultMode="Insert" EnableModelValidation="True"
    Riga 125:            Height="50px" Width="125px" OnItemInserting="DetailsView1_ItemInserting">
    giovedì 27 ottobre 2011 19:50
  • L'evento che devi intercettare è ItemInserted, non ItemInserting.

    E non hai postato lo stack trace, cioè la lista delle chiamate che vengono eseguite prima che si verifichi l'eccezione.


    Matteo Migliore

    Bloghttp://blogs.ugidotnet.org/matteomigliore
    Twitterhttp://twitter.com/matteomigliore
    CodePlex
    • Contrassegnato come risposta ciro.net giovedì 27 ottobre 2011 20:26
    giovedì 27 ottobre 2011 20:01
  • ok Matteo,

    grazie alle tue indicazioni sono riuscito ad intercettare. Ho solo un'ultima domanda

     

    Nella pagina ho il seguente codice

    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    


    Non riesco a referenziarmi a label1 all'interno del controllo dell'eccezione. Quindi nel metodo

     

    DetailsView1_ItemInserted

     

    nello stesso file aspx e ovviamente tra i tag script

    Se uso

    Label1.Text = name + " added successfully. ";

    mi dice che non esiste nel contesto corrente. Mi sembra anche giusto visto che non la definisco. Ma come faccio a riferirmi alla label presente nella pagina?

     

     

    giovedì 27 ottobre 2011 20:25
  • Uhm, prova a cancellare le directory bin e obj del progetto ASP.NET e quindi ricompilare con "Rebuild Solution".
    Matteo Migliore

    Bloghttp://blogs.ugidotnet.org/matteomigliore
    Twitterhttp://twitter.com/matteomigliore
    CodePlex
    giovedì 27 ottobre 2011 21:51
  • ciao apro un nuovo 3d in modo da separare le discussioni. grazie comunque per la soluzione
    sabato 29 ottobre 2011 19:19