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>