界面如下:
商品编号 商品名称 数量 单价 金额 备注 操作
tbstkno tbstkname qty price sumoney memo btnadd (这一行为web控件)(我写的是控件ID)在以上控件中填充数据后,点btnadd按钮通过DataTable绑定到gridview里,在页面上显示出来。
gridview是自动生成列,绑定的是由DataTable中创建的列。并把DataTable保存到了ViewState["DT"]中。
往gridview中添加完数据后,再点一个btninsert按钮,把gridview的数据行插入到数据,能成功插入。
并且在btninsert按钮事件中成功插入数据后加上了
GridView1.DataSource = null;
GridView1.DataBind();
这样把gridview1中的数据清空了。
在btninsert按钮旁边还有一个btnaddnew按钮,这个按钮是新建一张新的单据,
问题来了,当然点击btnadd按钮往gridview中加入一个条新记录时,上次清空的数据行就回来了,和这条新加的记录一块填充到了gridview中。
请问这是怎么回事啊?
谢谢!!!
商品编号 商品名称 数量 单价 金额 备注 操作
tbstkno tbstkname qty price sumoney memo btnadd (这一行为web控件)(我写的是控件ID)在以上控件中填充数据后,点btnadd按钮通过DataTable绑定到gridview里,在页面上显示出来。
gridview是自动生成列,绑定的是由DataTable中创建的列。并把DataTable保存到了ViewState["DT"]中。
往gridview中添加完数据后,再点一个btninsert按钮,把gridview的数据行插入到数据,能成功插入。
并且在btninsert按钮事件中成功插入数据后加上了
GridView1.DataSource = null;
GridView1.DataBind();
这样把gridview1中的数据清空了。
在btninsert按钮旁边还有一个btnaddnew按钮,这个按钮是新建一张新的单据,
问题来了,当然点击btnadd按钮往gridview中加入一个条新记录时,上次清空的数据行就回来了,和这条新加的记录一块填充到了gridview中。
请问这是怎么回事啊?
谢谢!!!
{
if (!Page.IsPostBack)
{
//初始化DataTable 加列
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("stkno"));
dt.Columns.Add(new DataColumn("stkname"));
dt.Columns.Add(new DataColumn("baseunit"));
dt.Columns.Add(new DataColumn("baseqty"));
dt.Columns.Add(new DataColumn("bulkprice"));
dt.Columns.Add(new DataColumn("summoney"));
dt.Columns.Add(new DataColumn("fkmoney"));
dt.Columns.Add(new DataColumn("sjmoney"));
dt.Columns.Add(new DataColumn("memo1"));
//dt.Columns.Add(new DataColumn("memo2"));
dt.Columns.Add(new DataColumn("id"));
dt.Columns.Add(new DataColumn("StkGroupName"));
ViewState["DT"] = dt;
sss();
}
}
//绑定商品
private void sss()
{
GridView1.DataSource = ViewState["DT"];
GridView1.DataBind();
}
//添加商品
protected void btnadd_Click(object sender, EventArgs e)
{
if (Convert.ToDecimal(tbxfkmoney.Text.ToString()) > Convert.ToDecimal(tbxsummoney.Text.ToString()))
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('返款金额不能大于订单金额!');</script>");
}
else
{
DataTable dt = (DataTable)ViewState["DT"];
DataRow row = dt.NewRow(); //为DATATABLE赋值
row["stkno"] = tbxstkno.Text;
row["stkname"] = tbxstkname.Text;
row["baseunit"] = tbxbaseunit.Text;
row["baseqty"] = tbxqty.Text;
row["bulkprice"] = tbxprice.Text;
row["summoney"] = Convert.ToDecimal(tbxprice.Text) * Convert.ToDecimal(tbxqty.Text);
row["fkmoney"] = tbxfkmoney.Text;
row["sjmoney"] = tbxsjmoney.Text;
row["memo1"] = tbxmemo1.Text.ToString().Trim();
//row["memo2"] = tbxmemo2.Text;
row["ID"] = HiddenField3.Value.ToString();
row["StkGroupName"] = HiddenField4.Value.ToString();
dt.Rows.Add(row); //绑定到GRIDVIEW上
sss();
ViewState["DT"] = dt; //把上次的记录清空
tbxstkno.Text = "";
tbxstkname.Text = "";
tbxbaseunit.Text = "";
tbxqty.Text = "";
tbxprice.Text = "";
tbxsummoney.Text = "";
tbxfkmoney.Text = "";
tbxsjmoney.Text = "";
tbxmemo1.Text = "";
//tbxmemo2.Text = "";
} }
//插入单据
protected void btninsert_Click(object sender, EventArgs e)
{
代码太多了,跟这儿也没关系,就不贴了.
}
//新建单据
protected void btnaddnew_Click(object sender, EventArgs e)
{
GridView1.DataSource = null;
GridView1.DataBind();
}
ViewState有缓存效果。
ViewState["DT"] = null;
GridView1.DataSource = ViewState["DT"] ;
GridView1.DataBind();
提示:未将对象设置到对象实例。
另外在初始datatable时,我把datatable生成的列结构保存到了ViewState["DTnew"]中后,
GridView1.DataSource = ViewState["DTnew"] ;
GridView1.DataBind();
也不行,上次的记录又出来了,按原理来说,应该没有数据了~~~
还有别的办法吗?
谢谢!!!
ViewState["DT"] = dt;
换下顺序
ViewState["DT"] = dt;
sss();
新建事件可以把table里面的数据全部拿掉
DataTable dt = (DataTable)ViewState["DT"];
dt.Rows.Clear();
ViewState["DT"]=dt;下面这个可能很乱,我只放了一个新的(Button2),一个add(Button1)
---------------------------
private void databind()
{
this.DG.DataSource=ViewState["DT"];
this.DG.DataBind();
} private void Button1_Click(object sender, System.EventArgs e)
{
if(ViewState["DT"] !=null)
{
DataTable dt = (DataTable)ViewState["DT"];
DataRow dr = dt.NewRow();
dr["Row"] = "02";
dr["sku"] = "TefadsdfasdstSKU";
dr["descr"] = "Sku descrdasiption test";
dr["qty"] = "99dd";
dr["res"] = "ddRes field";
dt.Rows.Add(dr);
ViewState["DT"]=dt;
}
else
{
DataSet ds = new DataSet();
ds.Tables.Add();
ds.Tables[0].Columns.Add("row");
ds.Tables[0].Columns.Add("sku");
ds.Tables[0].Columns.Add("descr");
ds.Tables[0].Columns.Add("qty");
ds.Tables[0].Columns.Add("res");
DataRow dr = ds.Tables[0].NewRow();
dr["Row"] = "02";
dr["sku"] = "TefadsdfasdstSKU";
dr["descr"] = "Sku descrdasiption test";
dr["qty"] = "99dd";
dr["res"] = "ddRes field";
ds.Tables[0].Rows.Add(dr);
ViewState["DT"]=ds.Tables[0];
}
databind();
} private void Button2_Click(object sender, System.EventArgs e)
{
ViewState["DT"]=null;
databind();
}
我试一下`~
rainnight83没有问题了`~~方便的话大家帮我看看
http://topic.csdn.net/u/20100304/11/04557c16-09fc-4d08-9aeb-e7b478a7c346.html?seed=1417610498&r=63699876#r_63699876
这个贴子. 谢谢`~~!!!!!