n° 219
Novembre 2017
Dicembre 12, 2017, 04:22:38 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: GridView problemi con il OnRowUpdating che chiama il RowEditing  (Letto 7224 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
giilla
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 54


Mostra profilo
« inserita:: Maggio 12, 2012, 01:11:33 »

Ciao,
ho creato una pagina aspx che contiente una gridview che visualizza i dati di un sqldatasource, nella stessa pagina effettuo l'update utilizzando la gridview, fin qui tutto ok. Se però applico dei filtri aggiorno la grid view e poi premo su edit si effettua il databind della query definita nella pagina asp e perdo il risultato del filtraggio. Il problema si verifica nel GridView1_RowEditing, infatti non appena effettua l'edit si aggiorna la GridView
 Non riesco a rintracciare l'evento in cui fa il Bind, ho pensato ad alcune soluzioni.
1-modificare dinamicamente la query di sqldatasource nella pagina asp....ma come si fa?HttpHandler??
2-creare un Databind nuovo, ed quindi quando richiamarlo?
 Che?!? Che?!? Indeciso Pianto

Vi posto la pagina asp e il codice C#
Grazie

Codice:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Modifica_Autore.aspx.cs" Inherits="WebApplication_Paola.Modifica_autore" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<table>
 <tr>
  <td>
    <asp:Label ID="Label1" runat="server" Text="Nome"></asp:Label>
    </td>
    <td>
    <asp:DropDownList ID="DropDownList_Nome" runat="server"
        DataSourceID="SqlDataSource_Nome" DataTextField="T1_Nome"
        DataValueField="T1_Nome"
        Width="141px"
        onselectedindexchanged="DropDownList_Nome_SelectedIndexChanged"
        AutoPostBack="True" AppendDataBoundItems="True">
        <asp:ListItem></asp:ListItem>       
    </asp:DropDownList>
    </td>
    </tr>
    <tr>
    <td>
    <asp:Label ID="Label2" runat="server" Text="Descrizione"></asp:Label>
    </td>
    <td>
    <asp:DropDownList ID="DropDownListDescrizione" runat="server"
        DataSourceID="SqlDataSource_Descrizione" DataTextField="T1_Descrizione"
        DataValueField="T1_Descrizione" AppendDataBoundItems="True"
        AutoPostBack="True"
        onselectedindexchanged="DropDownListDescrizione_SelectedIndexChanged" >
        <asp:ListItem></asp:ListItem>
    </asp:DropDownList>
    </td>
    </tr>
    <tr>
    <td>
     <asp:Label ID="Label3" runat="server" Text="Tipo"></asp:Label>
     </td>
     <td>
    <asp:DropDownList ID="DropDownListTipo" runat="server"
        DataTextField="T1_Tipo" DataValueField="T1_Tipo"
        AppendDataBoundItems="True" AutoPostBack="True"
        onselectedindexchanged="DropDownListTipo_SelectedIndexChanged">
        <asp:ListItem></asp:ListItem>
        <asp:ListItem Value="S">Single</asp:ListItem>
        <asp:ListItem Value="B">Band</asp:ListItem>
    </asp:DropDownList>
    </td>
     </tr>   
     <tr>
     <td>
    <asp:Button ID="ButtonReset" runat="server" Text="Reset"
        onclick="ButtonReset_Click" />
     </td>
     <td>
         &nbsp;</td>
    </tr>
    <tr>
    <asp:Label ID="LabelMessage" runat="server" BorderColor="Red"
        BorderStyle="Solid" Visible="False"></asp:Label>
    </tr>
    <tr>
    <td colspan="2">
    <asp:GridView ID="GridView1" runat="server"
    AutoGenerateEditButton="True"
    AutoGenerateColumns="False"
        DataKeyNames="T1_ID" DataSourceID="SqlDataSourceFilter" Width="534px"
        OnRowUpdating="grdContact_RowUpdating"
        AllowPaging="True"
        AllowSorting="True"
            onrowediting="GridView1_RowEditing" >
        <Columns>
            <asp:TemplateField HeaderText="ID" SortExpression="T1_Nome">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBoxID"  ReadOnly="True" runat="server" Text='<%# Bind("T1_ID") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label4" runat="server" Text='<%# Bind("T1_ID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
             <asp:TemplateField HeaderText="Nome" SortExpression="T1_Nome">
                 <EditItemTemplate>
                     <asp:TextBox ID="TextBoxNome" runat="server" Text='<%# Bind("T1_Nome") %>'></asp:TextBox>
                 </EditItemTemplate>
                 <ItemTemplate>
                     <asp:Label ID="Label1" runat="server" Text='<%# Bind("T1_Nome") %>'></asp:Label>
                 </ItemTemplate>
            </asp:TemplateField>
             <asp:TemplateField HeaderText="Descrizione" SortExpression="T1_Descrizione">
                 <EditItemTemplate>
                     <asp:TextBox ID="TextBoxDescrizione" runat="server" Text='<%# Bind("T1_Descrizione") %>'></asp:TextBox>
                 </EditItemTemplate>
                 <ItemTemplate>
                     <asp:Label ID="Label2" runat="server" Text='<%# Bind("T1_Descrizione") %>'></asp:Label>
                 </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Tipo" SortExpression="T1_Tipo">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBoxTipo" runat="server" Text='<%# Bind("T1_Tipo") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Bind("T1_Tipo") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    </td>
    </tr>
    </table>
        <asp:SqlDataSource ID="SqlDataSourceFilter" runat="server"
        ConnectionString="<%$ ConnectionStrings:TESTConnectionString %>"
        SelectCommand="SELECT [T1_ID], [T1_Nome], [T1_Descrizione], [T1_Tipo] FROM [T1_Autori] ORDER BY [T1_Nome], [T1_Tipo], [T1_Descrizione]">
    </asp:SqlDataSource>
    <asp:SqlDataSource ID="SqlDataSource_Descrizione" runat="server"
        ConnectionString="<%$ ConnectionStrings:TESTConnectionString %>"
        SelectCommand="SELECT DISTINCT [T1_Descrizione] FROM [T1_Autori] ORDER BY [T1_Descrizione]">
    </asp:SqlDataSource>
    <asp:SqlDataSource ID="SqlDataSource_Nome" runat="server"
        ConnectionString="<%$ ConnectionStrings:TESTConnectionString %>"
        SelectCommand="SELECT DISTINCT [T1_Nome] FROM [T1_Autori] ORDER BY [T1_Nome]">
    </asp:SqlDataSource>
</asp:Content>



mentre il codice c#
Codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using TestWebMsgApp;
using System.Data;






namespace WebApplication_Paola
{
    public partial class Modifica_autore : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            LabelMessage.Visible = false;
                           
             
            BindData_Griglia();
           
     
         }

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
           
        }

        protected void DropDownList_Nome_SelectedIndexChanged(object sender, EventArgs e)
        {
            String SqlStatments=null;
            if (DropDownList_Nome.Text.IndexOf("'") != -1)
            {
                String New_String=null;

                New_String = Modifica_Stringa(DropDownList_Nome.Text.IndexOf("'"), DropDownList_Nome.Text);
                SqlStatments = "SELECT * FROM T1_Autori where [T1_Nome]='" + New_String + "';";
            }
            else
                SqlStatments = "SELECT * FROM T1_Autori where [T1_Nome]='" + DropDownList_Nome.Text + "';";
            SqlDataSourceFilter.SelectCommand = SqlStatments;                               
            DropDownListDescrizione.Enabled = false;
            DropDownListTipo.Enabled = false;
           
        }

        protected void ButtonReset_Click(object sender, EventArgs e)
        {
            String SqlStatments = null;
            SqlStatments ="SELECT [T1_ID], [T1_Nome], [T1_Descrizione], [T1_Tipo] FROM [T1_Autori] ORDER BY [T1_Nome], [T1_Tipo], [T1_Descrizione]";
            SqlDataSourceFilter.SelectCommand = SqlStatments;
            DropDownListDescrizione.Enabled = true;
            DropDownListTipo.Enabled = true;

            DropDownList_Nome.Enabled = true;
            DropDownList_Nome.Items.Clear();
            DropDownList_Nome.Items.Insert(0, "");
            SqlDataSource_Nome.DataBind();
            DropDownList_Nome.DataBind();


            DropDownListDescrizione.Items.Clear();
            DropDownListDescrizione.Items.Insert(0, "");
            SqlDataSource_Descrizione.DataBind();
            DropDownListDescrizione.DataBind();

            DropDownListTipo.Items.Clear();
            DropDownListTipo.Items.Insert(0, "");           

            DropDownListTipo.Items.Insert(1, "Single");
            DropDownListTipo.Items[1].Value = "S";
            DropDownListTipo.Items.Insert(2, "Band");
            DropDownListTipo.Items[2].Value = "B";
            //SqlDataSourceTipo.DataBind();
            DropDownListTipo.DataBind();

            GridView1.DataBind();
            DropDownListTipo.Text = "";
            DropDownListDescrizione.Text = "";
            DropDownList_Nome.Text = "";
           
        }

        protected void DropDownListDescrizione_SelectedIndexChanged(object sender, EventArgs e)
        {
            String SqlStatments = null;
            SqlStatments = "SELECT * FROM T1_Autori where [T1_Descrizione]='" + DropDownListDescrizione.Text + "';";
            SqlDataSourceFilter.SelectCommand = SqlStatments;
            DropDownList_Nome.Enabled = false;
            DropDownListTipo.Enabled = false;
            GridView1.DataBind();
        }

        protected void DropDownListTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            String SqlStatments = null;
            SqlStatments = "SELECT * FROM T1_Autori where [T1_Tipo]='" + DropDownListTipo.Text + "';";
            SqlDataSourceFilter.SelectCommand = SqlStatments;
            DropDownList_Nome.Enabled = false;
            DropDownListDescrizione.Enabled = false;
            GridView1.DataBind();
        }

        public String Modifica_Stringa(int indice, String Old_stringa) {
            String tmp=null;
            String tmp2=null;
           // tmp = tmp2 = Old_stringa;

            tmp=Old_stringa.Substring(0, indice);
            tmp2 = Old_stringa.Substring(indice);
            tmp = tmp + "'" + tmp2;
            return tmp;
        }

        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            String ID=null;
            String SqlStatment=null;
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                GridViewRow row = GridView1.Rows[i];
               // GridView1.Rows[i].Cells[4].

                bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked;

                if (isChecked)
                {                                   
                    ID = GridView1.Rows[i].Cells[0].Text;
                    SqlStatment="Delete from T1_Autori where T1_ID='"+ID+"'";
                    SqlDataSourceFilter.DeleteCommand = SqlStatment;
                    try
                   {
                       
                       
                   
                        SqlDataSourceFilter.Delete();
                        DropDownList_Nome.Items.Clear();
                        DropDownList_Nome.Items.Insert(0, "");
                        SqlDataSource_Nome.DataBind();
                        DropDownList_Nome.DataBind();
                       
                   }
                   catch (SqlException ex) {
                       String Message = null;
                       Message = ex.Message;
                       LabelMessage.Text = Message;
                       LabelMessage.Visible = true;
                   }

                }
            }
        }
        protected void grdContact_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            String SqlUpdate = null;
            TextBox Nome_Autore;
            TextBox Descrizione_Autore;
            TextBox Tipo;
            TextBox ID;

            Nome_Autore = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].FindControl("TextBoxNome")));
            Descrizione_Autore = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].FindControl("TextBoxDescrizione")));
            Tipo = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].FindControl("TextBoxTipo")));
            ID=((TextBox)(GridView1.Rows[e.RowIndex].Cells[0].FindControl("TextBoxID")));
            SqlUpdate = "UPDATE [T1_Autori] SET [T1_Nome] ='" + Nome_Autore.Text + "', [T1_Descrizione] ='" + Descrizione_Autore.Text + "', [T1_Tipo] ='" + Tipo.Text + "'  WHERE [T1_ID]='" + ID .Text+ "' ";
            SqlDataSourceFilter.UpdateCommand = SqlUpdate;
            GridView1.DataBind();
            //inserire un messageBox
            WebMsgBox.Show("Il record è stato correttamente modificato!");
            ButtonReset_Click(sender, e);
        }

        protected void BindData_Griglia()
        {
            GridView1.DataSource = Session["TaskTable"];           
            GridView1.DataBind();

        }

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            BindData_Griglia();
            GridView1.EditIndex = e.NewEditIndex; //prende l'indice della query iniziale :((       
                   
        }

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //???????
        }

     
       
    }
}
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #1 inserita:: Maggio 13, 2012, 07:52:43 »

Non riesco a capire quale sia il problema.
Tu indichi l'errore con "infatti non appena effettua l'edit si aggiorna la GridView".

Nel codice postato effettui il riempimento dei dati della griglia ad ogni postback,  forse è l'origine del tuo problema. Prova ad usare la variabile "IsPostBack" nel Page_Load:
Codice:
       protected void Page_Load(object sender, EventArgs e)
        {
            if(!Page.IsPostBack)  // notare il "!"
                BindData_Griglia();
        };

Perdonami ma "Modifica_Stringa" è un orrore. Usa questa funzione:
Codice:
       private string DQ(string value)
        {
            return value.Replace("'", "''");
        }
E chiamala FomattaSql, SqlText, io usavo DQ ("double quote" oppure DA="doppi apici") perché un nome breve è facile da inserire nelle query.
      
Codice:
 protected void DropDownList_Nome_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlDataSourceFilter.SelectCommand = "SELECT * FROM T1_Autori where [T1_Nome]='" + DQ(DropDownList_Nome.Text) + "';";
            DropDownListDescrizione.Enabled = false;
            DropDownListTipo.Enabled = false;
        }

Oltretutto correggevi solo la prima occorrenza di un apice, potrebbe essercene più d'uno. Dovresti usare questa funzione per ogni parametro passato nelle query.

Vedi se il "IsPostBack" ti risolve, altrimenti spiega meglio il comportamento che non trovi corretto.

ciao
Registrato
giilla
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 54


Mostra profilo
« Risposta #2 inserita:: Maggio 13, 2012, 08:18:52 »

Ciao Alex,
Grazie per la risposta...domani in ufficio provo...nn ho con me il db...
e grazie per la dritta sul "Modifica_Stringa"...è solo da due settimane che uso C#/asp e nn conoscevo l'esistenza del replace!:) grazie Occhiolino
La pagina dovrebbe lavorare nel seguente modo:
1-la gridView carica tutti i dati dal DB
2-l'utente se vuole può applicare un filtro tramite dropdowlist
3-l'utente modifica i dati nella griglia

Ciò che non va è che nel momento in cui si clicca su Edit la griglia fa un DataBind con la query passata nella pagina asp, anzichè lasciare i dati della query applicata con il filtro passata tramite C#!

...nel Page load avevo già provato il
Codice:
  if(Page.IsPostBack)
                BindData_Griglia()
....in realtà appena entra nell'evento GridView1_RowEditing che si verifica prima dell'Update
già SqlDataSource si è aggiornato la query originaria della pagina asp...e io dovrei evitare questo comportamento!
Grazie
 Ghigno
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #3 inserita:: Maggio 13, 2012, 08:52:12 »

Citazione
Ciò che non va è che nel momento in cui si clicca su Edit la griglia fa un DataBind con la query passata nella pagina asp, anzichè lasciare i dati della query applicata con il filtro passata tramite C#!
1) La griglia fa "sempre" un DataBind proprio per la mancanza del "!IsPostBack"
2) ... con la query passata nella pagina asp ...: quale query?
3) ... anziché lasciare i dati della query applicata ...:  quale query?

In un primo momento ho inserito il codice errato, ma ora è corretto: if(!Page.IsPostBack) <-- notare l'esclamativo.

Il tuo procedimento è valido ma posso anche suggerirti l'utilizzo dei SqlParameter, vado a memoria:
Codice:
<asp:SqlDataSource ID="SqlDataSourceFilter" runat="server" ConnectionString="<%$ ConnectionStrings:TESTConnectionString %>"
    SelectCommand="SELECT [T1_ID], [T1_Nome], [T1_Descrizione], [T1_Tipo] FROM [T1_Autori] where @nome is NULL or T1_Nome = @nome ORDER BY [T1_Nome], [T1_Tipo], [T1_Descrizione]">
    <SelectParameters>
        <asp:ControlParameter Name="nome" Type="String" ControlID="DropDownList_Nome" PropertyName="Text"  ConvertEmptyStringToNull="true" />
    </SelectParameters>
</asp:SqlDataSource>

Nota l'uso della chiocciola per il nome del parametro (da verificare sulla documentazione).
Nota il trucco della stringa convertita in NULL che in combinazione con l'OR della query NON applica il filtro se la lastringa è vuota(ConvertEmptyStringToNull="true"), verificare se "is NULL" o "= NULL", mi sbaglio spesso.

Sono sempre più convinto che l'errore sia nel DataBind effettuato ad ogni lettura di pagina... verifica.
Registrato
giilla
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 54


Mostra profilo
« Risposta #4 inserita:: Maggio 14, 2012, 11:12:28 »

Ciao Alex ,
ho provato con
Codice:
if(!Page.IsPostBack)
                BindData_Griglia()
ma non va perchè il Bottone Edit della GridView si richiama un Javascript (che nn rintraccio che mi fa il  Postback) della query della pagina asp...
ovvero

Codice:
        <asp:SqlDataSource ID="SqlDataSourceFilter" runat="server"
        ConnectionString="<%$ ConnectionStrings:TESTConnectionString %>"         
        SelectCommand="SELECT [T1_ID], [T1_Nome], [T1_Descrizione], [T1_Tipo] FROM [T1_Autori] ORDER BY [T1_Nome], [T1_Tipo], [T1_Descrizione]"
        EnableViewState="False" onload="SqlDataSourceFilter_Load">
    </asp:SqlDataSource>

mentre la query passata tramite C# è

Codice:
        protected void DropDownList_Nome_SelectedIndexChanged(object sender, EventArgs e)
        {
            //String SqlStatments=null;
            if (DropDownList_Nome.Text.IndexOf("'") != -1)
            {
                String New_String=null;             
                SqlStatments = "SELECT * FROM T1_Autori where [T1_Nome]='" + DropDownList_Nome.Text + "';";
            SqlDataSourceFilter.SelectCommand = SqlStatments;                               
            DropDownListDescrizione.Enabled = false;
            DropDownListTipo.Enabled = false;
           
        }

Comunque ho risolto  , inserendo una variabile globale statica nella classe e quando fa il load dell'SqlDataSource gli passo la query che desidero

Codice:
       protected void SqlDataSourceFilter_Load(object sender, EventArgs e)
        {
            String attuale_valore = null;
            SqlDataSourceFilter.SelectCommand = SqlStatments;
        }


dove SqlStatments
Codice:
  public partial class Modifica_autore : System.Web.UI.Page
    {
        public static String SqlStatments = null;
         ..........

Grazie
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #5 inserita:: Maggio 14, 2012, 12:28:58 »

Per il javascript credo tu ti riferisca all'arcinoto "__doPostBack(...)" che è il modo in cui ASP.Net invia il form al server. Questo lo hanno TUTTI i bottoni (Button, LinkButton, ...) ed i controlli su cui è impostato la proprietà "AutoPostBack" a true (DropdownList, ...).
Se NON usi l'AjaxControlToolkit (non funziona con ajax) ti sarà di certo utile il Tracing, magari abilitandolo solo sulla singola pagina in caso di bisogno. Abbonda di chiamate come questa dopo ogni metodo (Page_Load. Button_Click) e dove vuoi verificare il valore di una variabile:
Codice:
Trace.Warn("[nome funzione]");

Mi spiace non aver compreso ancora il problema, comunque se da un lato in ASP.Net molti controlli fanno il grosso dl lavoro in modo trasparente l'altra faccia della medaglia è proprio la difficoltà nel capire il meccanismo (la sequenza degli eventi) che sta dietro al processo di creazione della pagina HTML ed al mantenimento dello stato/valore dei controlli.
Io ci ho messo anni! Ed anche se ora utilizzo molto più codice "fatto a mano" (per esigenza di customizzazione estrema ed ottimizzazione) quando metto le mani sui controlli "già pronti" spesso ci vuole un pò a rimettere in ordine le cose per "maneggiarne" il comportamento.

Ad esempio avrai problemi se nella riga in modifica ti si dovesse presentare l'esigenza di inserire un controllo che ne condizione un altro (tipico esempio: Provincia -> Comune), perchè ti costringono ad avere un ulteriore (o più) postback, prima del salvataggio.

A parte questo sono contento che tu abbia risolto ma attenta alla variabile "static", tutte le richieste (più utenti o più finestre del browser aperte) condivideranno quella variabile, infatti lo "static" la rende solamente condivisa tra tutte le richieste alla pagina, non "permanente" tra una richiesta e l'altra.
Ricordati che comunque NON vive tra un postback e l'altro ma solo per la singola chiamata al server, quando il server restituisce la pagina al browser questa variabile non esisterà più.
Non dico che non abbia senso di esistere, io ne uso a bizzeffe nelle pagine, ma non credo abbia senso che sia "static".

ciao
Registrato
giilla
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 54


Mostra profilo
« Risposta #6 inserita:: Maggio 14, 2012, 02:36:41 »

Ciao,
Citazione
Per il javascript credo tu ti riferisca all'arcinoto "__doPostBack(...)" che è il modo in cui ASP.Net invia il form al server. Questo lo hanno TUTTI i bottoni (Button, LinkButton, ...) ed i controlli su cui è impostato la proprietà "AutoPostBack" a true (DropdownList, ...).
...ehmm sono nuova ...e x me nn è tanto arcinoto  Ghigno
Grazie per la dritta sul Trace  lo proverò al + presto Felice

Citazione
se da un lato in ASP.Net molti controlli fanno il grosso dl lavoro in modo trasparente l'altra faccia della medaglia è proprio la difficoltà nel capire il meccanismo (la sequenza degli eventi) che sta dietro al processo di creazione della pagina HTML ed al mantenimento dello stato/valore dei controlli.
...Sante parole....sono 2 settimane...che cerco di capire la sequenza....forse dovrei leggere un manuale !:(

Le variabili static in c# nn hanno lo stesso comportamento delle variabili static in java? Ovvero che mantengono il valore per istanze differenti di una classe, nn sono variabili di classe?

Grazie ancora
Ciao ciao Felice
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #7 inserita:: Maggio 14, 2012, 06:37:49 »

Ho provato ad immaginare cosa potrebbe succedere con due richieste se la variabile è "
condivisa" tra più istanze della classe (richieste semi-contemporanee della tua Page).
In questo caso esiste una sola "query" che viene usata dai processi contemporanei.

Codice:
User A                                          User B
server.Request (processo A)                     Server.Request (processo B)
|                                                         |
|                                                         |
filter "pippo"                                            |

      [static query = Select ... name="pippo"]
 
|                          |
|                                               filter "pluto"  
            
      [(static query = Select ... name="pluto"]
 
|                                                          |
|                                                          |
|                                               grid.DataBind(usa query)
grid.DataBind(usa query)                                   |
|                                                          |
|                                                          |
User A vede "pluto"                             User B vede "pluto"

Ad ogni richiesta che giunge al Server se non ci sono istanze della Page attive la variabile viene reinizializzata SEMPRE. Ed ad una richiesta successiva, la TUA richiesta è una fra le tante, la variabile (statica o meno) non ha alcun legame con la precedente, è solo "condivisa" con altre istanze della pagina eventualmente esistenti in quel momento (che ovviamente sono di altri utenti/browser).
Ovviamente, tutto questo nel caso estremo di un server con ...aia di richieste all'ora.

Lo stesso avverrebbe con Java (JSP) credo.
Per mantenere il valore delle variabili tra richieste differenti il meccanismo più "semplice" è il Session (come anche in Java, se non ricordo male), che è una "collezione" che viene mantenuta in memoria e viene legata alle richieste consecutive di uno stesso browser; niente di miracoloso: usa una variabile nascosta con un ID univoco per "riconoscere" da chi proviene la richiesta e recuperare proprio i SUOI dati, ma è tutto trasparente allo sviluppatore. Nel caso in questione non serve, di certo la incontrerai in futuro.
Ti ho scritto questo perché mi sembra tu (come altri) stessi confondendo le due cose.

Sono certo che sperimentando con debugging alla mano e Tracing avrai delle sorprese e imparerai parecchio, un libro ti sarà più utile avanti (a mio parere); per la sequenza/spiegazione degli eventi fai riferimento ad esempio a questo:ASP.Net Page lyfe cycle.

ciao
Registrato
giilla
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 54


Mostra profilo
« Risposta #8 inserita:: Maggio 15, 2012, 08:58:46 »

Ciao Alex,
sicuramente hai perfettamente ragione sulle variabili static...infatti le ho modificate!;)
Grazie per tutte le dritte che mi hai dato.
grazie grazie  Ghigno Ghigno Ghigno
Ciao
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines