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>

ataGrid id="MyDataGrid" runat="server" BackColor="White"
Rispondi quotando