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

    colonna del datagrid che si aggiorna automaticamente

    Sto cercando di risolvere questo problema (ormai da giorni):

    vorrei visualizzare una tabella con X records, in ogni riga vorrei
    visualizzare un textbox per
    l'inserimento di numeri (quantità) e la quantità inserita dovrà motiplicata
    per il prezzo (per ogni riga)

    visualizzazione tabella -> OK
    colonna per l'inserimento della quantità (inizializzata a 0 ed aggiunta
    dinamicamente al dataset dato che non è presente nel DB) -> OK
    il prezzo non viene aggiornato


    Credo che il problema sia dovuto a questo:

    DataRow dr = ((DataTable)Session["ElencoArticoli"]).Rows[i];

    try

    {

    dr[24] = Int32.Parse(qtyTextBox.Text);

    }

    ...


    }

    BindGrid();

    --->>>>>>> Session["ElencoArticoli"] = DsDati;


    dato che dovrei aggiornare la variabile di sessione con la modifica fatta
    alla riga



    codice utilizzato:


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

    {



    if(!IsPostBack)

    {

    Session["ElencoArticoli"] = null;

    BindGrid();

    }





    }





    protected void BindGrid()

    {


    if (Session["ElencoArticoli"] != null)

    {


    //DsDati = (DataTable)Session["ElencoArticoli"];

    MyDataGrid.DataSource = ((DataTable)Session["ElencoArticoli"]).DefaultView;;

    }

    else

    {



    GetData();



    Session["ElencoArticoli"] = DsDati.Tables["Articoli"];

    MyDataGrid.DataSource = DsDati.Tables["Articoli"].DefaultView;

    DataColumn dc = new DataColumn("Qty", typeof(int));

    dc.DefaultValue = 0;

    DsDati.Tables["Articoli"].Columns.Add(dc);



    MyDataGrid.DataBind();

    }







    }








    private void GetData()

    {


    try

    {

    DsDati = new DataSet();

    .....

    DataAdapt.Fill(DsDati, "Articoli");



    myConnection.Close();


    }

    catch (Exception exc)

    {

    string debug = exc.Message;


    }


    }



    void Page_Init(Object sender, EventArgs e)

    {

    MyDataGrid.EnableViewState=true;

    }





    public void btnUpdate_click(Object sender, EventArgs e)

    {

    for (int i=0; i<MyDataGrid.Items.Count; i++)

    {

    DataGridItem _item = MyDataGrid.Items[i];

    TextBox qtyTextBox = (TextBox)_item.FindControl("txtQty");



    DataRow dr = ((DataTable)Session["ElencoArticoli"]).Rows[i];

    try

    {

    dr[24] = Int32.Parse(qtyTextBox.Text);

    }

    catch(Exception ex)

    {

    //gestione dell'eccezione

    }


    }

    BindGrid();

    Session["ElencoArticoli"] = DsDati;

    }



    public Double CalcTotal (int count, Double price)

    {

    Double total = count * price;

    runningTotal += total;

    return(total);

    }





    in HTML

    <ASPataGrid id="MyDataGrid" runat="server" BackColor="White"
    BorderColor="White" BorderStyle="Ridge"
    BorderWidth="2px" GridLines="none" CellPadding="3"
    CellSpacing="1" Font-Name="Verdana" Font-Size="8pt"
    HeaderStyle-BackColor="#aaaadd"
    AutoGenerateColumns="false" Width="95%" HorizontalAlign="Center">
    <SelectedItemStyle Font-Bold="True" ForeColor="White"
    BackColor="#9471DE"></SelectedItemStyle>
    <ItemStyle ForeColor="Black"
    BackColor="#DEDFDE"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="#E7E7FF"
    BackColor="#698696"></HeaderStyle>
    <FooterStyle ForeColor="Black"
    BackColor="#C6C3C6"></FooterStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="Quantità;">
    <ItemTemplate>
    <asp:TextBox Cssclass="TestoDataGrid" id=txtQty
    runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Qty") %>'
    OnTextChanged="btnUpdate_click" AutoPostBack="True" Width="40px" />
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:BoundColumn ItemStyle-CssClass="TestoDataGrid"
    DataField="Articolo" HeaderText="Prodotto"></asp:BoundColumn>
    <asp:BoundColumn ItemStyle-CssClass="TestoDataGrid"
    DataField="PrezzoVendita" HeaderText="Prezzo"
    DataFormatString="{0:c}"></asp:BoundColumn>
    </Columns>
    </ASPataGrid>

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    262
    :master:

    non è un po troppo lungo da leggere?

    :master:

    focalizza il problema


  3. #3
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    ho postato tutto il codice per far capire la logica seguita

    il problema è che non capisco se ho seguito la logica correttta..

    soprattutto nell'aggiornamento della variabile di sessione dopo aver modificato i textbox

  4. #4
    Da quello che ho potuto vedere nel codice, l'aggiornamento della variabile di sessione è corretto e va bene, tu aggiorni la quantità i totali invece andrebbero calcolati al volo grazie all'evento onItemDataBound.

    Ti metto un piccolo esempio prendendo il tuo datagrid a cui ho aggiunto l'evento OnItemDataBound :

    codice:
    <ASP:DataGrid id="MyDataGrid" 
    			runat="server" 
    			BackColor="White" 
    			BorderColor="White" 
    			BorderStyle="Ridge" 
    			BorderWidth="2px" 
    			GridLines="none" 
    			CellPadding="3" 
    			CellSpacing="1" 
    			Font-Name="Verdana" 
    			Font-Size="8pt" 
    			HeaderStyle-BackColor="#aaaadd" 
    			AutoGenerateColumns="false" 
    			Width="95%" 
    			HorizontalAlign="Center"
    			OnItemDataBound="Item_Bound"> 
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle> 
    <ItemStyle ForeColor="Black" BackColor="#DEDFDE"></ItemStyle> 
    <HeaderStyle Font-Bold="True" ForeColor="#E7E7FF" BackColor="#698696"></HeaderStyle> 
    <FooterStyle ForeColor="Black" BackColor="#C6C3C6"></FooterStyle> 
    <Columns> 
    	<asp:TemplateColumn HeaderText="Quantità;"> 
    		<ItemTemplate> 
    		<asp:TextBox Cssclass="TestoDataGrid" id=txtQty 
    			runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Qty") %>' 
    			OnTextChanged="btnUpdate_click" AutoPostBack="True" Width="40px" /> 
    		</ItemTemplate> 
    	</asp:TemplateColumn> 
    	<asp:BoundColumn ItemStyle-CssClass="TestoDataGrid" 
    			DataField="Articolo" HeaderText="Prodotto"></asp:BoundColumn> 
    	<asp:BoundColumn ItemStyle-CssClass="TestoDataGrid" 
    			DataField="PrezzoVendita" HeaderText="Prezzo" 
    			DataFormatString="{0:c}"></asp:BoundColumn> 
    </Columns> 
    </ASP:DataGrid>
    L'evento Item_Bound che si scatena è questo :

    codice:
    protected void Item_Bound(Object sender, DataGridItemEventArgs e) {
    
    	if((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
    	{
    
    		//Prendo il valore che sta nella cella delle quantità
    		TextBox qtyTextBox = (TextBox)e.Item.FindControl("txtQty"); 
    
    		//Moltiptlico il valore della quantità per il prezzo e ottengo il totale, lo metto poi nella cella desiderata
    		e.Item.Cells[2] = Convert.ToInt32(qtyTextBox.Text) * Prezzo; //Dove Prezzo è il valore del prezzo univoco che puoi ricavare dalla variabile di sessione
    
    	}
    
    }

  5. #5
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Grazie per l'aiuto!

    due problemi

    1) non ho capito come recuperare il valore del prezzo

    2) per ora ho provato a mettere 10 come valore del prezzo, per fare alcune prove (dato che non ho capito come recuperare il valore)

    ma ottengo, in compilazione

    e.Item.Cells[2] = Convert.ToInt32(qtyTextBox.Text) * 10;

    file.aspx.cs(252): Cannot implicitly convert type 'int' to 'System.Web.UI.WebControls.TableCell'

    grazie ancora

  6. #6
    Intanto rispondo al secondo problema :

    modifica così :
    codice:
    e.Item.Cells[2].Text = (Convert.ToInt32(qtyTextBox.Text) * 10).ToString();
    Per il primo problema devi estrarre il prezzo dalla variabile di sessione, tieni conto che e.Item.ItemIndex contiene il numero di riga, prova a vedere se facendo così

    codice:
    DataRow dr = ((DataTable)Session["ElencoArticoli"]).Rows[e.Item.ItemIndex];
    riesci a recuperare la riga e quindi il prezzo da usare poi per la moltiplica

  7. #7
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    e.Item.Cells[2].Text = (Convert.ToInt32(qtyTextBox.Text) * 10).ToString();
    visualizzo la colonna "Prezzo" con tutti "0"

    e modificando la colonna "Quantita" non succede nulla




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.