<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
Width="185px">
<Columns>
<asp:BoundField HeaderText="产品名称" />
<asp:BoundField HeaderText="产品数量" />
<asp:BoundField HeaderText="操作" />
</Columns>
</asp:GridView><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="11%"><asp:TextBox runat="server" name="NAME" ID="NAME" size="10" /></td>
<td width="14%"><asp:TextBox runat="server" name="NUM" ID="NUM" size="10"/></td>
<td width="75%"> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><asp:Button runat="server" ID="addyearPro" Text="增加" onclick="addyearPro_Click" /></td>
</tr>
</table><asp:Button runat="server" ID="addyearPro" Text="提交" onclick="addyearPro_Click" />
就是这样,有个GridView,有2个文本框,和一个添加按钮,最后有个“提交”按钮。
当点击添加按钮就向GridView添加数据。
不用数据库,就这样临时的放在控件里做显示。
在GridView中有一列是删除,单击删除,能删除该列数据。
当点击提交按钮时,把GridView确定下来的数据,再保存到数据库。
兄弟,增加了删除的功能.
動態生成List<string>,然後綁定到GridView1
看看這個,用STATIC變量來保存數據,提交的時候移除。
--CS
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
public partial class Default4 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["A"] = "AAA";
}
}
//通過sessionid能獲取維一的客戶段內容
protected void addyearPro_Click(object sender, EventArgs e)
{
string SessionID = Session.SessionID;
string Name = NAME.Text;
string Qty = NUM.Text;
Product pc = new Product(Name, Qty);
List<Product> newPList = ManagerProcut.Find(SessionID);
if (newPList != null)
{
newPList.Add(pc);
}
else
{
newPList = new List<Product>();
newPList.Add(pc);
ManagerProcut.pc.Add(SessionID, newPList);
}
GridView1.DataSource = newPList;
GridView1.DataBind();
}
//來臨時保存客戶端的內容
public static class ManagerProcut
{
public static Dictionary<string, List<Product>> pc = new Dictionary<string, List<Product>>();
public static List<Product> Find(string Key)
{
if (pc.ContainsKey(Key))
{
return pc[Key];
}
else
{
return null;
}
}
public static bool Remove(string Key)
{
if (pc.ContainsKey(Key))
{
return pc.Remove(Key);
}
else
{
return false;
}
}
}
public class Product
{
public Product(string ProductName,string Qty)
{
this._ProductName = ProductName;
this._Qty = Qty;
}
private string _ProductName;
private string _Qty;
public string ProductName
{
get { return _ProductName; }
set { _ProductName = value; }
}
public string Qty
{
get { return _Qty; }
set { _Qty = value; }
}
}
protected void Button1_Click(object sender, EventArgs e)
{
foreach (GridViewRow gr in GridView1.Rows)
{
Response.Write("<p>新記錄:");
foreach (TableCell tc in gr.Cells)
{
Response.Write("<br/>");
Response.Write(tc.Text);
}
Response.Write("</p>");
}
string SessionID = Session.SessionID;
ManagerProcut.pc.Remove(SessionID);//移除
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
String Sessionid = Session.SessionID;
GridViewRow gr = GridView1.Rows[e.RowIndex];
string ProductName = gr.Cells[0].Text;
List<Product> per = ManagerProcut.Find(Sessionid);
if (per.Count > 0)
{
Product pdt = null;
foreach (Product pr in per)
{
if (pr.ProductName == ProductName)
{
pdt = pr;
break;
}
}
if (pdt != null)
{
bool m = per.Remove(pdt);
if (m)
{
GridView1.DataSource = per;
GridView1.DataBind();
}
}
}
}
_aspx
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>未命名頁面</title>
</head>
<body>
<form id="Form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="185px" OnRowDeleting="GridView1_RowDeleting">
<Columns>
<asp:BoundField HeaderText="产品名称" DataField="PRoductName" />
<asp:BoundField HeaderText="产品数量" DataField="QTY" />
<asp:ButtonField HeaderText ='Delete' CommandName="DELETE" Text="Delete"/>
</Columns>
</asp:GridView>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="11%" style="height: 24px">
<asp:TextBox ID="NAME" runat="server" /></td>
<td width="14%" style="height: 24px">
<asp:TextBox ID="NUM" runat="server" /></td>
<td width="75%" style="height: 24px">
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
<asp:Button ID="Button1" runat="server" Text="增加" OnClick="addyearPro_Click" /></td>
</tr>
</table>
<asp:Button ID="Button2" runat="server" Text="提交" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
首先不提倡这么做,web服务器压力太大,数据传输量对网络要求也大。
实现:
把List<Class> 序列化以后保存到ViewState中,若是嫌ViewState太大,可以把ViewState保存到数据库中。
每次绑定前需要把数据库中查询到的List与ViewState中的List合成后,再进行绑定。
实体类中最好标志位判断是否是数据库中的值。
实体类要求可序列化。
非常不合理的做法