Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117

    Problema cancellazione elemento

    Ciao a tutti,

    da cosa può dipendere questo errore dopo il delete di un record da un
    datagrid

    Index was out of range. Must be non-negative and less than the size of the
    collection. Parameter name: index
    Description: An unhandled exception occurred during the execution of the
    current web request. Please review the stack trace for more information
    about the error and where it originated in the code.

    Exception Details: System.ArgumentOutOfRangeException: Index was out of
    range. Must be non-negative and less than the size of the collection.
    Parameter name: index

    Source Error:


    Line 239: {
    Line 240:
    Line 241: int IDRiga =(int)dgCarrello.DataKeys[(int)E.Item.ItemIndex];
    Line 242:
    Line 243: OleDbCommand myCommand = new OleDbCommand("SP_Carrello_Delete",
    myConnection);





    <asp:datagrid id="dgCarrello" runat="server" HorizontalAlign="Center"
    AutoGenerateColumns="False"
    OnDeleteCommand="dgCarrello_Delete" OnSortCommand="Sort_Grid"
    OnPageIndexChanged="dgCarrello_PageIndexChanged"
    DataKeyField="ID" PagerStyle-Position="TopAndBottom"
    PagerStyle-HorizontalAlign="Center" PagerStyle-Mode="NextPrev"
    AllowSorting="True" CellSpacing="1" CellPadding="3" BackColor="White"
    BorderColor="White"
    BorderWidth="2px" GridLines="None" BorderStyle="Ridge" PageSize="1"
    Width="600px">








    protected void dgCarrello_Delete(Object sender, DataGridCommandEventArgs
    E)
    {
    int IDRiga =(int)dgCarrello.DataKeys[(int)E.Item.ItemIndex];

    OleDbCommand myCommand = new OleDbCommand("SP_Carrello_Delete",
    myConnection);
    myCommand.CommandType=CommandType.StoredProcedure;
    myCommand.Parameters.Add(new OleDbParameter("@IDRiga", IDRiga));

    try
    {
    myConnection.Open();
    myCommand.ExecuteNonQuery();
    myConnection.Close();

    lblErrore.Text = "Elemento cancellato correttamente!";
    dgCarrello.EditItemIndex = -1;
    BindGrid();
    }
    .....






    private void Page_Load(object sender, System.EventArgs e)
    {
    ....


    if(!IsPostBack)
    {
    BindGrid();
    }
    ....

    }



    protected void BindGrid()
    {

    // creo il DataSet per il DataGrid
    GetData();


    // Imposto l'ordinamento presente nel ViewState
    if (ViewState["Order"] != null)
    {
    DsDati.Tables["Carrello"].DefaultView.Sort =
    ViewState["Order"].ToString();
    }



    // Imposto il filtro presente nel ViewState
    if (ViewState["LastFilter"] != null)
    {
    DsDati.Tables["Carrello"].DefaultView.RowFilter =
    ViewState["LastFilter"].ToString();
    }


    dgCarrello.DataSource = DsDati.Tables["Carrello"].DefaultView;
    dgCarrello.DataBind();



    NumeroRecords = DsDati.Tables["Carrello"].DefaultView.Count;
    ElencoRecords.Text = NumeroRecords.ToString();

    }







    private void GetData()
    {

    try
    {

    DsDati = new DataSet();

    OleDbCommand myCommand = new OleDbCommand("SP_Carrello", myConnection);
    myCommand.Parameters.Add(new OleDbParameter("@CodiceUtente",
    ....
    OleDbDataAdapter DataAdapt = new OleDbDataAdapter(myCommand);

    DataAdapt.Fill(DsDati, "Carrello");

    myConnection.Close();


    }
    }

  2. #2
    Utente di HTML.it L'avatar di edaje
    Registrato dal
    Jul 2003
    Messaggi
    363
    secondo me l'errore è qui

    int IDRiga =(int)dgCarrello.DataKeys[(int)E.Item.ItemIndex];
    intanto una nota, non serve fare il casting E.Item.ItemIndex dato che restituisce già un intero.

    Hai settato la chiave primaria sulla datagrid? daCarrello.DataKeyField="IDRiga"

    Fai debug e vedi quanto vale ItemIndex quando clicchi il pulsante

    Federico

  3. #3
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    L'ID è giusto, infatti viene cancellato l'elemento

    il problema che noto in fase di debug è che dopo il delete e il getdata() viene eseguito un nuovo delete... e un nuovo getdata()...

    e poi un'alro

    quindi il delete non si limita al solo elemento selezionato

    ma prosegue


    strano!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    99
    Domandina:
    Cosa usi come ambiente di sviluppo?
    Visual Studio ?
    Comunque quando fai il debug, dovresti vedere come mai ti rifara il Delete e il Getdata nel senso

    La prima volta ok, quando ci ritorna sarà perchè viene richiamata di nuovo tramite il debug vedi la funziona che lo richiama cosi vedi come mai lo fa 2 volte...


    Ps Ti avevo chiesto se utilizzi visual studio perchè..nn usi mai gli handles alla tue funzioni..
    Ciaoz

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    99
    Domandina:
    Cosa usi come ambiente di sviluppo?
    Visual Studio ?
    Comunque quando fai il debug, dovresti vedere come mai ti rifara il Delete e il Getdata nel senso

    La prima volta ok, quando ci ritorna sarà perchè viene richiamata di nuovo tramite il debug vedi la funziona che lo richiama cosi vedi come mai lo fa 2 volte...


    Ps Ti avevo chiesto se utilizzi visual studio perchè..nn usi mai gli handles alla tue funzioni..
    Ciaoz

  6. #6
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Uso VS

    cosa sono gli handles??


    non capisco per quale motivo viene richiamata due volte...

    l'esecuzione della funzione di delete è indicato nell'instazione del data grid

  7. #7
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Nessun suggerimento???


  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    99
    Ciao , allora una cosa..utilizzi VS quasi come un editor qualsiasi da come vedo che scrivi il codice e questo nn bene ..e lo facevo anchio..ti conviene studiare un po come funziona VS e quando impari è tutto un altro mondo fidati..

    xchè nn serve a nulla dichiare nel datagrid gli eventi Edit, Delete ecc..
    gli handles servono a quello..
    in pratica tu hai 2 menu a tendina nel ambiente di visuluppo
    Uno selezioni oggetto e nel altro evento che appena lo selezioni gti crea la funzione con handles associato..

    a parte questo,,,,ti avevo detto di utilizzare il Debug che cosi vedi xchè te lo caricava 2 volte..
    ma il debug nn intendevo che premi F5 e ti dice dove sta errore ..
    il debug di VS chemetti i break ponti e vedi passaggio per passagio cosa fa VS

    per esempio Metti un Break(F9) nel page Load e poi quando tu fai partire il progetto e arrivi li vai di F10 cosi vedi che combina..

    e utilizzando questo sicuramnte vedi dove sbaglio...
    Ora vado che son stanco se hai problemi fammi sapere ciaozz
    e Notte

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.