<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Mobile_AjustmentVoucher.aspx.cs" Inherits="Mobile_AjustmentVoucher" EnableEventValidation="false" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
.auto-style1 {
position: absolute;
top: -8px;
left: 121px;
z-index: 1;
}
</style>
</head>
<body>
<form id="form1" runat="server" class="auto-style8">
<asp:Label ID="Label1" runat="server" Text="Adj. Voucher No"></asp:Label>
<br />
<asp:TextBox ID="tb_adjustmentId" runat="server"></asp:TextBox>
<br />
<br />
<div id="container">
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowDeleting="GridView1_RowDeleting"
OnRowEditing="GridView1_RowEditing"
OnRowUpdating="GridView1_RowUpdating"
DataKeyNames = "itemId" >
<Columns>
<asp:BoundField DataField="itemId" HeaderText="itemId" ReadOnly="true"/>
<asp:BoundField DataField="description" HeaderText="Description" ReadOnly="true" />
<asp:BoundField DataField="adjustment" HeaderText="Adjustment" />
<asp:BoundField DataField="remark" HeaderText="Reason" />
<asp:CommandField HeaderText="Delete" ShowDeleteButton="True" ShowHeader="True" />
<asp:CommandField HeaderText="Edit" ShowEditButton="True" ShowHeader="True" />
</Columns>
</asp:GridView>
</div>
<br />
<br />
<asp:Panel ID="Panel1" runat="server" CssClass="auto-style7">
<asp:Label ID="lb_description" runat="server" Text="Description"></asp:Label>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ADT9DB1ConnectionString %>" SelectCommand="SELECT [description] FROM [stationaryCatelogue]"></asp:SqlDataSource>
<br />
<asp:Label ID="lb_adjustemnt" runat="server" Text="Adjustment"></asp:Label>
<asp:TextBox ID="tb_adjustment" runat="server" Text="0"></asp:TextBox>
<br />
<asp:Label ID="lb_mark" runat="server" Text="Reason"></asp:Label>
<asp:TextBox ID="tb_mark" runat="server"></asp:TextBox>
<br />
<asp:DropDownList ID="ddl_description" runat="server" CssClass="auto-style1" DataSourceID="SqlDataSource1" DataTextField="description" DataValueField="description">
</asp:DropDownList>
<br />
<asp:Button ID="bt_save" runat="server" OnClick="bt_save_Click" Text="Save" />
</asp:Panel>
<asp:Button ID="bt_add" runat="server" OnClick="bt_add_Click" Text="Add" />
<br />
<asp:Button ID="bt_calculatePrice" runat="server" CssClass="auto-style6" Text="calculate" OnClick="bt_calculatePrice_Click" />
<br />
<br />
<br />
<asp:Button ID="bt_submit" runat="server" Text="Submit for Authorisation" OnClick="bt_submit_Click" />
<asp:TextBox ID="tb_totalPrice" runat="server" CssClass="auto-style4" ></asp:TextBox>
<br />
<br />
<asp:TextBox ID="tb_test1" runat="server"></asp:TextBox>
</form>
</body>
</html>
aspx.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Mobile_AjustmentVoucher : System.Web.UI.Page
{
ADT9DB1Entities1 context;
transactionList tl;
transactionListItem tli;
stationaryCatelogue sc;
static HashSet<transactionListItem> adjustmentList;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Panel1.Visible = false;
adjustmentList = (HashSet<transactionListItem>)Application["adjustmentList"];
bind();
}
context = new ADT9DB1Entities1();
tl = new transactionList();
tli = new transactionListItem();
sc = new stationaryCatelogue();
getAdjustmentId();
tb_adjustmentId.Text = (string)Application["adjustmentId"];
// display current itmem in the adjustmentList
//bind();
}
public void bind()
{
GridView1.DataSource = adjustmentList;
GridView1.DataBind();
}
public void getAdjustmentId()
{
if (Application ["adjustmentId"].Equals(""))
{
//create adjustmentId and the the table
Application.Lock();
Application["adjustmentId"] = "iav" + "/" + User.Identity.Name + "/" + DateTime.Now; ;
Application.UnLock();
tl.id = (string)Application["adjustmentId"];
tl.type = "iav";
context.transactionLists.Add(tl);
context.SaveChanges();
}
tl.id = (string)Application["adjustmentId"];
}
protected void bt_submit_Click(object sender, EventArgs e)
{
saveToDatabse();
//redirect
}
protected void bt_cancel_Click(object sender, EventArgs e)
{
clearModel();
//redirect
}
public void clearModel()
{
adjustmentList = null;
Application.Lock();
Application ["adjustmentId"] = "";
Application ["adjustmentList"] = "";
Application.UnLock();
}
protected void bt_add_Click(object sender, EventArgs e)
{
Panel1.Visible = true;
}
public void clearInputs()
{
ddl_description.Text = null;
tb_adjustment.Text = "0";
tb_mark.Text = null;
}
public void fillTransactionItemsModel()
{
var q = context.stationaryCatelogues.Where(x => x.description == ddl_description.SelectedValue).FirstOrDefault();
tli.transactionId = tl.id;
tli.itemId = q.id.ToString();
tli.finalQty = q.currentBalance + Convert.ToInt32(tb_adjustment.Text);
tli.remark = tb_mark.Text.ToString();
tli.description = ddl_description.SelectedValue;
tli.adjustment = Convert.ToInt32(tb_adjustment.Text);
adjustmentList.Add(tli);
}
protected void bt_save_Click(object sender, EventArgs e)
{
fillTransactionItemsModel();
bind();
//clear
clearInputs();
calculatePrice();
}
public double calculatePrice()
{
double totalPrice = 0;
foreach (var item in adjustmentList)
{
sc = context.stationaryCatelogues.Where(x => x.id == item.itemId).FirstOrDefault();
totalPrice += Convert.ToDouble(item.adjustment * sc.price1);
}
return totalPrice;
}
public void saveToDatabse()
{
//write to database
tl.requestBy = User.Identity.Name;
tl.requestDate = DateTime.Now;
context.SaveChanges();
int count = context.transactionListItems.Select(x => x.id).ToList().Last();
foreach (transactionListItem item in adjustmentList)
{
item.id = count++;
context.transactionListItems.Add(item);
context.SaveChanges();
}
//clear adjustmentId session
clearModel();
////redirect
}
protected void bt_calculatePrice_Click(object sender, EventArgs e)
{
tb_totalPrice.Text = calculatePrice().ToString();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string itemId = GridView1.DataKeys[e.RowIndex].Value.ToString();
adjustmentList.RemoveWhere(x => x.itemId == itemId);
bind();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//GridViewRow row = GridView1.Rows[e.RowIndex];
////TextBox adjustment = (TextBox)row.FindControl("adjustment");
////TextBox remark = (TextBox)row.FindControl("remark");
//TextBox adjustment = (TextBox)row.Cells[0].Controls[0];
//TextBox remark = (TextBox)row.Cells[1].Controls[0];
string itemId = GridView1.DataKeys[e.RowIndex].Value.ToString();
//read only
//string description = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim();
string adjustment = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim();
string remark = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim();
//?
//update in the adjustmentList
transactionListItem q = adjustmentList.First(x => x.itemId == itemId);
q.adjustment = Convert.ToInt32(adjustment);
q.remark = remark;
//tb_test1.Text = adjustment.ToString();
tb_test1.Text = q.adjustment.ToString();
GridView1.EditIndex = -1;
bind();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
bind();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
bind();
}
}
useful link
http://www.aspsnippets.com/Articles/Insert-Update-Edit-Delete-record-in-GridView-using-SqlDataSource-in-ASPNet.aspx