Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: matrice a scala

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    30

    matrice a scala

    salve gente, questo è il mio primo approccio con la programmazione asp.net, dopo aver seguito la vostra guida c# e asp.net, ho deciso di fare una prova creando una pagina web in cui data una matrice mi si dice se è a scala.

    Modificando leggermente un esempio della vostra guida sono arrivato a questo:

    codice:
    <html>
    <head>
    <script language="C#" runat="server">
    void Page_Load(Object sender, EventArgs e)
    {
        
    }
    
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        
    }
    
    protected void nrighe_SelectedIndexChanged(object sender, EventArgs e)
    {
    
        int row = 0;
        //genera righe e colonne
        int numrows = Convert.ToInt32(nrighe.SelectedItem.Text);
        int numcells = Convert.ToInt32(ncolonne.SelectedItem.Text);
        for (int j = 0; j < numrows; j++)
        {
            HtmlTableRow r = new HtmlTableRow();
            row++;
            for (int i = 0; i < numcells; i++)
            {
                HtmlTableCell c = new HtmlTableCell();
                HtmlInputText val = new HtmlInputText();
                string nome = "val" + j.ToString() + i.ToString();
                val.ID = nome;
                val.Value = "0";
                val.Size = 2;
                c.Controls.Add(val);
                r.Cells.Add(c);
            }
            Table1.Rows.Add(r);
        }
    }
    
    protected void ncolonne_SelectedIndexChanged(object sender, EventArgs e)
    {
    
        int row = 0;
        //genera righe e colonne
        int numrows = Convert.ToInt32(nrighe.SelectedItem.Text);
        int numcells = Convert.ToInt32(ncolonne.SelectedItem.Text);
        for (int j = 0; j < numrows; j++)
        {
            HtmlTableRow r = new HtmlTableRow();
            row++;
            for (int i = 0; i < numcells; i++)
            {
                HtmlTableCell c = new HtmlTableCell();
                HtmlInputText val = new HtmlInputText();
                string nome = "val" + j.ToString() + i.ToString();
                val.ID = nome;
                val.Value = "0";
                val.Size = 2;
                c.Controls.Add(val);
                r.Cells.Add(c);
            }
            Table1.Rows.Add(r);
        }
    }
    </script>
        <style type="text/css">
            #Select1 {
                height: 16px;
            }
        </style>
    </head>
    <body>
    <h3>Matrici a scala</h3>
    <form id="Form1" runat="server">
    <table id="Table1" CellPadding=5 cellspacing="0" Border="1" BorderColor="black" runat="server" />
    <p style="width: 544px; height: 33px">
        Matrice:
    <asp:DropDownList id="nrighe" runat="server" 
            onselectedindexchanged="nrighe_SelectedIndexChanged" >
      <asp:ListItem>1</asp:ListItem>
      <asp:ListItem>2</asp:ListItem>
      <asp:ListItem>3</asp:ListItem>
      <asp:ListItem>4</asp:ListItem>
    </asp:DropDownList>
    x
    <asp:DropDownList id="ncolonne" runat="server" 
            onselectedindexchanged="ncolonne_SelectedIndexChanged" >
      <asp:ListItem>1</asp:ListItem>
      <asp:ListItem>2</asp:ListItem>
      <asp:ListItem>3</asp:ListItem>
      <asp:ListItem>4</asp:ListItem>
    </asp:DropDownList>
        <p style="width: 544px; height: 33px">
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" 
                Text="E' a scala?" />
                </form>
        <p style="width: 544px; height: 62px">
            <asp:Label ID="testover" runat="server"></asp:Label>
        </p>
    </body>
    </html>

    ho capito che il mio codice in c# viene eseguito al caricamento della pagina, quindi quando premo il pulsante, essendo un sender mi richiama la pagina giusto?

    Quello che vorrei fare è che la matrice modifichi le sue dimensioni selezionandole dai <select> sfortunatamente però visual studio non mi fa inserire nuovi eventi in c#, solo in javascript.

    quello che vorrei fare è rigenerare la nuova matrice al variare delle dimensioni e verificare se è a scala (devo ancora scrivere il codice) quando premo il pulsante, ma non riesco a gestire gli eventi

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Due cose:

    1- Le persone che hanno scritto la guida non siamo noi sono altre che non vedono il forum.
    2- Prova a scrivere il codice nei tag CODE, copialo dal tuo editor ed incollalo nel mezzo di [CODE] e [ /CODE] (senza spazi)

    Altrimenti cosi' nessuno ti risponderà, in quanto il codice e' illeggibile.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    30
    è quello che ho fatto, ma il codice resta su una sola riga di testo.

    ad ogni modo non c'è bisogno di mostrare il codice adesso, ho solo bisogno di qualche spiegazione,

    ho creato due droplist che fanno da riga x colonna di una tabella,
    vorrei che al cambiare dell'elemento nella droplist si visualizzi la tabella con le dimensioni modificate, tuttavia questo avviene soltanto se associo il codice ad un evento di un bottone e non a SelectedIndexChanged del dropbox ad esempio

    come posso fare?

    riprovo a postare il codice anche se non credo che il problema sia li:
    codice:
    protected void ncolonne_SelectedIndexChanged(object sender, EventArgs e)
    {
    
        int row = 0;
        //genera righe e colonne
        int numrows = Convert.ToInt32(nrighe.SelectedItem.Text);
        int numcells = Convert.ToInt32(ncolonne.SelectedItem.Text);
        for (int j = 0; j < numrows; j++)
        {
            HtmlTableRow r = new HtmlTableRow();
            row++;
            for (int i = 0; i < numcells; i++)
            {
                HtmlTableCell c = new HtmlTableCell();
                HtmlInputText val = new HtmlInputText();
                string nome = "val" + j.ToString() + i.ToString();
                val.ID = nome;
                val.Value = "0";
                val.Size = 2;
                c.Controls.Add(val);
                r.Cells.Add(c);
            }
            Table1.Rows.Add(r);
        }
    }

  4. #4
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    devi impostare l'attributo AutoPostBack delle DropDownList a true per poter gestire il SelectedIndexChanged


  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    30
    grazie mille

    gia che ci sono faccio un altra domanda, anche se sarebbe più orientata sul c#

    codice:
    for (int j = 0; j < numrows; j++)
        {
            HtmlTableRow r = new HtmlTableRow();
            row++;
            for (int i = 0; i < numcells; i++)
            {
                HtmlTableCell c = new HtmlTableCell();
                HtmlInputText val = new HtmlInputText();
                string nome = "val" + j.ToString() + i.ToString();
                val.ID = nome;
                val.Value = "0";
                val.Size = 2;
                c.Controls.Add(val);
                r.Cells.Add(c);
            }
            Table1.Rows.Add(r);
        }
    come si vede in questo codice, ho creato diversi oggetti di tipo htmlinputtext e gli ho dato un ID diverso in modo da poterli richiamare più avanti e controllare quale valore l'utente assegna a tali textbox

    il problema è... come li richiamo adesso in maniera dinamica? o_o

    mi spiego, mi serve richiamarli in questo ciclo e controllare uno alla volta se il loro valore è diverso da 0
    codice:
    protected void Button1_Click(object sender, EventArgs e)
    {
        int numrows = Convert.ToInt32(nrighe.SelectedItem.Text);
        int numcells = Convert.ToInt32(ncolonne.SelectedItem.Text);
        for (int i = 0; i < numrows; i++)
        {
            for (int j = 0; j < numcells; j++) { 
                HtmlInputText nuova = 
                int num = 
            }
        }
    }

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    dovrebbe essere:
    codice:
            for (int j = 0; j < numcells; j++) { 
                HtmlInputText nuova = this.FindControl("val" + i.ToString() + j.ToString());
                int num = (int)nuova.Value;
            }
    vedi se li trova. a volte no perche' sono nidificati dentro altri oggetti

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    30
    Messaggio di errore del compilatore: CS0266: Impossibile convertire in modo implicito il tipo 'System.Web.UI.Control' in 'System.Web.UI.HtmlControls.HtmlInputText'. È presente una conversione esplicita. Probabile cast mancante.

    mi da questo errore, perché non lo vede come htmlinputtext?

    edit: ho risolto castando in (htmlinputtext), il problema è che in esecuzione poi mi dice che: Riferimento a un oggetto non impostato su un'istanza di oggetto.

    riferendosi a: num = Convert.ToInt32(nuova.Value);

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Scusa hai ragione, non ho provato, e sono abituato a VB
    Dovresti fare il cast della prima istruzione, FindControl restituisce la classe Control.
    Castala in HtmlInputText e vedi se va.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    30
    si avevo già risolto in quel modo, il problema è che in esecuzione poi mi dice che: Riferimento a un oggetto non impostato su un'istanza di oggetto.

    riferendosi a: num = Convert.ToInt32(nuova.Value);

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    1- ma ricrei il tutto -ad ogni postback- ? altrimenti le textbox non esistono...

    2- se si, prova a cercare nell'oggetto che le contiene, le text (la tabella o andando piu' su' il Form1)

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.