<%@ Page Language="C#" AutoEventWireup="true" CodeFile="inproduct.aspx.cs" Inherits="inproduct" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="添加第一行" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="添加第二行" OnClick="Button2_Click" />
<asp:GridView ID="GridView1" runat="server" EnableModelValidation="True">
</asp:GridView>
</div>
</form>
</body>
</html>
后台
using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class inproduct : System.Web.UI.Page
{
public DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
DataColumn dc1 = new DataColumn("prizename", Type.GetType("System.String"));
DataColumn dc2 = new DataColumn("point", Type.GetType("System.Int16"));
DataColumn dc3 = new DataColumn("number", Type.GetType("System.Int16"));
DataColumn dc4 = new DataColumn("totalpoint", Type.GetType("System.Int64"));
DataColumn dc5 = new DataColumn("prizeid", Type.GetType("System.String"));
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Columns.Add(dc4);
dt.Columns.Add(dc5);
DataRow dr = dt.NewRow();
dr["prizename"] = "娃娃1";
dr["point"] = 10;
dr["number"] = 1;
dr["totalpoint"] = 10;
dr["prizeid"] = "001";
dt.Rows.Add(dr);
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
DataRow dr = dt.NewRow();
dr["prizename"] = "娃娃2";
dr["point"] = 20;
dr["number"] = 2;
dr["totalpoint"] = 20;
dr["prizeid"] = "002";
dt.Rows.Add(dr);
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void Button2_Click(object sender, EventArgs e)
{
DataRow dr2 = dt.NewRow();
dr2["prizename"] = "娃娃3";
dr2["point"] = 30;
dr2["number"] = 3;
dr2["totalpoint"] = 30;
dr2["prizeid"] = "003";
dt.Rows.Add(dr2);
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
你的代码中存在一个问题,即在每次添加新的行数据之后,你没有将DataTable对象保存到ViewState或Session中,因此在页面回发之后,DataTable对象中之前添加的数据会被清空。因此,如果你想要保存之前添加的数据,你需要在每次添加新的数据之后,将DataTable对象保存到ViewState或Session中。
using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class inproduct : System.Web.UI.Page
{
public DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dt = new DataTable();
DataColumn dc1 = new DataColumn("prizename", Type.GetType("System.String"));
DataColumn dc2 = new DataColumn("point", Type.GetType("System.Int16"));
DataColumn dc3 = new DataColumn("number", Type.GetType("System.Int16"));
DataColumn dc4 = new DataColumn("totalpoint", Type.GetType("System.Int64"));
DataColumn dc5 = new DataColumn("prizeid", Type.GetType("System.String"));
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Columns.Add(dc4);
dt.Columns.Add(dc5);
DataRow dr = dt.NewRow();
dr["prizename"] = "娃娃1";
dr["point"] = 10;
dr["number"] = 1;
dr["totalpoint"] = 10;
dr["prizeid"] = "001";
dt.Rows.Add(dr);
ViewState["dt"] = dt;
GridView1.DataSource = dt;
GridView1.DataBind();
}
else
{
dt = (DataTable)ViewState["dt"];
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
dt = (DataTable)ViewState["dt"];
DataRow dr = dt.NewRow();
dr["prizename"] = "娃娃2";
dr["point"] = 20;
dr["number"] = 2;
dr["totalpoint"] = 20;
dr["prizeid"] = "002";
dt.Rows.Add(dr);
ViewState["dt"] = dt;
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void Button2_Click(object sender, EventArgs e)
{
dt = (DataTable)ViewState["dt"];
DataRow dr2 = dt.NewRow();
dr2["prizename"] = "娃娃3";
dr2["point"] = 30;
dr2["number"] = 3;
dr2["totalpoint"] = 30;
dr2["prizeid"] = "003";
dt.Rows.Add(dr2);
ViewState["dt"] = dt;
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
在修改后的代码中,我们首先在Page_Load事件中判断页面是否是回发(Postback),如果不是回发,则创建一个新的DataTable对象,并向其中添加一行数据。然后,我们将DataTable对象保存到ViewState中。如果页面是回发,则从ViewState中获取之前保存的DataTable对象,并重新绑定GridView控件。
在Button1_Click和Button2_Click事件中,我们首先从ViewState中获取保存的DataTable对象,然后向其中添加新的行数据,并将DataTable对象重新保存到ViewState中。最后,我们重新绑定GridView控件,以显示最新的数据。
这样,你就可以在每次添加新的行数据之后,保存DataTable对象到ViewState中,从而确保之前添加的数据不会被清空。