Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126

    [c#]CommandArgument sempre uguale

    ciao, stò cercando di assegnare il CommandArgumenti ad ogni pulsante del repeater, ma quando vado a recuperarlo è sempre uguale, mentre controllando l'assegnazione questo è diverso.. da cosa può dipendere?
    codice:
    protected void repViewRow_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            int a = Convert.ToInt32(e.CommandArgument);
            Response.Write(a.ToString());
        }
        protected void repViewRow_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
            {
                ((Button)e.Item.FindControl("btnDelRow")).CommandArgument = rowNumber.ToString();
            }
        }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    La variabile rowNumber da cui estrai il valore da utilizzare come CommandArgument da dove proviene?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da alka
    La variabile rowNumber da cui estrai il valore da utilizzare come CommandArgument da dove proviene?
    rowNumber cambia sicuramente.. ho messo in debug e controllato.. cmq proviene (o meglio viene modificata) dall'evento click di un pulsante.. ma cmq quando arrivo nell'ItemDatabound del repeater la variabile cambia..

  4. #4
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    mi sà che è meglio inviare il codice che popola la variabile:
    codice:
    protected void btnAddRow_Click(object sender, EventArgs e)
        {
            rowNumber = 0;
            if (Session["cachedArchive"] == null)
            {
                dtRighe = new DataTable("Review");
                dtRighe.Columns.Add("clid");
                dtRighe.Columns.Add("clmod");
                dtRighe.Columns.Add("clprzpubb");
                dtRighe.Columns.Add("climpriv");
            }
            else
            {
                dtRighe = (DataTable)Session["cachedArchive"];
            }
    
            if (dtRighe.Rows.Count > 0)
            {
                for(int i=0; i < dtRighe.Rows.Count; i++)
                {
                    if (i == dtRighe.Rows.Count -1)
                    {
                        rowNumber = i+1;
                    }
                }
                
            }
            drRighe = dtRighe.NewRow();
            drRighe[0] = rowNumber;
            drRighe[1] = txtmod.Text.ToString();
            drRighe[2] = txtprzpubb.Text.ToString();
            drRighe[3] = txtimprival.Text.ToString();
            dtRighe.Rows.Add(drRighe);
    
            Session["cachedArchive"] = dtRighe;
            repViewRow.DataSource = (DataTable)Session["cachedArchive"];
            repViewRow.DataMember = "Review";
            repViewRow.DataBind();
      
        }

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Proviamo a cercare altrove il problema... hai verificato che la tabella non venga reinizializzata quando la pagina viene caricata nuovamente per effetto dell'operazione di PostBack?

    P.S.: quel ciclo per determinare rowNumber è superfluo, poiché il valore può essere assegnato direttamente alla variabile.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    allora, la tabella non viene reinizializzata da come puoi vedere.. nella pagina c'è solo questo codice che ho inviato.. e se ci fosse una reinizializzazione verrebbe fatta nell'evento click del pulsante.. ma come vedi faccio un controllo sulla session..
    per quanto riguarda il ciclo avevo pensato anch'io ad una assegnazione diretta.. ma a me serve l'ultimo numero inserito per poter aumentare l'indice.. e se non controllo l'ultimo record del datatable come faccio a capire qual'è l'ultimo id?
    cmq il problema del commandargument sempre uguale rimane.. eppure ribadisco che al momento dell'assegnazione è diverso ogni volta

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da dops
    allora, la tabella non viene reinizializzata da come puoi vedere..
    Non lo posso sapere, non mi hai postato il codice completo della classe.

    Originariamente inviato da dops
    nella pagina c'è solo questo codice che ho inviato..
    Come carichi i dati nel Repeater quando entri nlla pagina per la prima volta?

    Originariamente inviato da dops
    e se ci fosse una reinizializzazione verrebbe fatta nell'evento click del pulsante.. ma come vedi faccio un controllo sulla session..
    Non è la reinizializzazione della variabile che mi preoccupa, ma quella del Repeater.

    Originariamente inviato da dops
    per quanto riguarda il ciclo avevo pensato anch'io ad una assegnazione diretta.. ma a me serve l'ultimo numero inserito per poter aumentare l'indice.. e se non controllo l'ultimo record del datatable come faccio a capire qual'è l'ultimo id?
    Il tuo ciclo assegna il valore di un contatore alla variabile rowNumber quando il contatore stesso raggiunge il valore di Rows.Count, quindi tanto vale assegnare a rowNumber direttamente il valore di Rows.Count: è la stessa identica cosa (o quasi, perché eviti di fare un ciclo che non serve).

    Originariamente inviato da dops
    cmq il problema del commandargument sempre uguale rimane.. eppure ribadisco che al momento dell'assegnazione è diverso ogni volta
    Il sospetto è quello che l'argomento venga reimpostato o annullato in qualche modo da altre operazioni; non c'è il contenuto della pagina, non c'è il codice completo della classe.
    Nell'evento Page_Load non è presente alcuna istruzione? :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    no, nel Page Load non c'è nulla.. la prima volta che carico la pagina il repeater rimane vuoto.. e non databindato.. ne faccio il databind solo dopo aver premuto il pulsante con il codice che ho scritto (quello dove c'è il ciclo che non và bene).. cmq ecco il codice completo della classe:
    codice:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    public partial class admin_Default : System.Web.UI.Page
    {
        protected DataTable dtRighe;
        protected DataRow drRighe;
        protected DataSet dsRighe;
        int rowNumber;
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void btnAddRow_Click(object sender, EventArgs e)
        {
            rowNumber = 0;
            if (Session["cachedArchive"] == null)
            {
                dtRighe = new DataTable("Review");
                dtRighe.Columns.Add("clid");
                dtRighe.Columns.Add("clmod");
                dtRighe.Columns.Add("clprzpubb");
                dtRighe.Columns.Add("climpriv");
            }
            else
            {
                dtRighe = (DataTable)Session["cachedArchive"];
            }
    
            if (dtRighe.Rows.Count > 0)
            {
                rowNumber = dtRighe.Rows.Count;
            }
            
            drRighe = dtRighe.NewRow();
            drRighe[0] = rowNumber;
            drRighe[1] = txtmod.Text.ToString();
            drRighe[2] = txtprzpubb.Text.ToString();
            drRighe[3] = txtimprival.Text.ToString();
            dtRighe.Rows.Add(drRighe);
    
            Session["cachedArchive"] = dtRighe;
            repViewRow.DataSource = (DataTable)Session["cachedArchive"];
            repViewRow.DataMember = "Review";
            repViewRow.DataBind();
      
        }
    
        protected void repViewRow_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            int a = Convert.ToInt32(e.CommandArgument);
            Response.Write(a.ToString());
        }
        protected void repViewRow_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
            {
                ((Button)e.Item.FindControl("btnDelRow")).CommandArgument = rowNumber.ToString();
            }
        }
    }
    ed ecco il codice della pagina.. solo il repeater ovviamente (l'html mi sembra aquanto superfluo postarlo )
    codice:
    <asp:Repeater ID="repViewRow" runat="server" OnItemCommand="repViewRow_ItemCommand" OnItemDataBound="repViewRow_ItemDataBound">
            <ItemTemplate>
            
        <tr>
            <td style="width: 111px">
            <%#DataBinder.Eval(Container.DataItem,"clid") %>
            </td>
            <td style="width: 53px">
            <%#DataBinder.Eval(Container.DataItem,"clmod") %>
            </td>
            <td style="width: 159px">
            <%#DataBinder.Eval(Container.DataItem,"clprzpubb") %>
            </td>
            <td>
            <%#DataBinder.Eval(Container.DataItem,"climpriv") %>
            </td>
            <td style="width: 123px">
                <asp:Button ID="btnDelRow" runat="server" Text="-" Width="25px" /></td>
        </tr>
        
            </ItemTemplate>
            </asp:Repeater>

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Faccio qualche prova ed eventualmente più tardi ti scrivo qualcosa.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da alka
    Faccio qualche prova ed eventualmente più tardi ti scrivo qualcosa.
    grazie mille.. veramente molto gentile

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.