读书人

postback 数据库更新了 但是页面没有更

发布时间: 2012-01-03 22:16:06 作者: rapoo

postback 数据库更新了 但是页面没有更新
postback 数据库更新了 但是页面没有更新 必须点第二次才能看到上次页面的更新结果 使用了UpdatePanel和不使用都这样 我想要的是点了按钮事件 只点一下 数据库也更新 页面上的数据也立即更新 这里说下 我使用了存储过程 在网上看到貌似直接写SQL不存在这样的问题(没试过) 但是小弟存储过程和业务逻辑都写完了 不想改回来 所以在这里跪求原因以及解决方案 谢谢啊!


public partial class barket : System.Web.UI.UserControl
{
private string username= " ";
private int ishandled=0;
public string UserName {get{return username;}set{username=value;}}
public int isHandled { get { return ishandled; } set { ishandled = value; } }
protected void Page_Load(object sender, EventArgs e)
{
init_barket();
}
protected void lb_jszx_Click(object sender, EventArgs e)
{
Response.Redirect( "jszx.aspx ");
}

protected void lb_delAll_Click(object sender, EventArgs e)
{
Order myOrder = new Order();
List <OrderInfo> myOrderInfoList = myOrder.GetOrdersByUser(UserName, isHandled);
foreach (OrderInfo myOrderInfo in myOrderInfoList)
{
myOrder.DeleteOrder(myOrderInfo.OrderID);
}
}

protected void lb_modify_Click(object sender, EventArgs e)
{
Order myOrder = new Order();
List <OrderInfo> myOrderInfoList = myOrder.GetOrdersByUser(UserName, isHandled);

foreach (OrderInfo myOrderInfo in myOrderInfoList)
{
TextBox tb = (TextBox)FindControl( "c " + myOrderInfo.OrderID.ToString());
myOrderInfo.ProductCounts = int.Parse(tb.Text);
myOrder.UpdateOrder(myOrderInfo);
}
//Response.Write( " <script> document.location.href=document.location.href </script> ");


}

void ib_delOrder_Click(object sender, ImageClickEventArgs e)
{
ImageButton ib_delOrder = (ImageButton)sender;
Order myOrder = new Order();
myOrder.DeleteOrder(int.Parse(ib_delOrder.UniqueID));
}

public void init_barket()
{
barketTable.Controls.Clear();
Order myOrder = new Order();
List <OrderInfo> myOrderInfoList = myOrder.GetOrdersByUser(UserName, isHandled);
float Amount = 0;
int Counts = 0;

TableRow tr_title = new TableRow();
TableCell tc_spmc = new TableCell();
tc_spmc.Controls.Add(new LiteralControl( "商品名称 "));
tr_title.Cells.Add(tc_spmc);
TableCell tc_dj = new TableCell();
tc_dj.Controls.Add(new LiteralControl( "单价 "));
tr_title.Cells.Add(tc_dj);
TableCell tc_sl = new TableCell();
tc_sl.Controls.Add(new LiteralControl( "数量 "));
tr_title.Cells.Add(tc_sl);
TableCell tc_zj = new TableCell();
tc_zj.Controls.Add(new LiteralControl( "总价 "));
tr_title.Cells.Add(tc_zj);
TableCell tc_sc = new TableCell();
tc_sc.Controls.Add(new LiteralControl( "删除 "));
tr_title.Cells.Add(tc_sc);
barketTable.Rows.Add(tr_title);

foreach (OrderInfo myOrderInfo in myOrderInfoList)
{
TableRow tr = new TableRow();
//商品名称
TableCell tc_pName = new TableCell();


tc_pName.Controls.Add(new LiteralControl(myOrderInfo.ProductName));
tr.Cells.Add(tc_pName);

//单价
TableCell tc_Price = new TableCell();
tc_Price.Controls.Add(new LiteralControl(myOrderInfo.Price.ToString() + "元 "));
tr.Cells.Add(tc_Price);

//数量
TableCell tc_Counts = new TableCell();
TextBox tb_Counts = new TextBox();
tb_Counts.ID = "c " + myOrderInfo.OrderID.ToString();
tb_Counts.BorderStyle = BorderStyle.Dotted;
tb_Counts.BorderWidth = 1;
tb_Counts.Font.Size = 9;
tb_Counts.Text = myOrderInfo.ProductCounts.ToString();
tb_Counts.Width = 20;
tb_Counts.Height = 13;
tc_Counts.Controls.Add(tb_Counts);
tr.Cells.Add(tc_Counts);

//总价
TableCell tc_Amounts = new TableCell();
float cp_amount = myOrderInfo.ProductCounts * myOrderInfo.Price;
tc_Amounts.Controls.Add(new LiteralControl(cp_amount.ToString() + "元 "));
tr.Cells.Add(tc_Amounts);

//删除
TableCell tc_delOrder = new TableCell();
ImageButton ib_delOrder = new ImageButton();
ib_delOrder.ID = myOrderInfo.OrderID.ToString();


ib_delOrder.ImageUrl = "Images/trash.gif ";
ib_delOrder.BorderWidth = 0;
ib_delOrder.ImageAlign = ImageAlign.AbsMiddle;
ib_delOrder.Click += new ImageClickEventHandler(ib_delOrder_Click);
tc_delOrder.Controls.Add(ib_delOrder);
tr.Cells.Add(tc_delOrder);
barketTable.Rows.Add(tr);

//总的价格和数量
Amount += cp_amount;
Counts += myOrderInfo.ProductCounts;
}

//状态信息栏
TableRow tr_total = new TableRow();
TableCell tc_total = new TableCell();
tc_total.ColumnSpan = 5;
tc_total.Controls.Add(new LiteralControl( "购物车里有商品: " + myOrderInfoList.Count.ToString() + "件 总数: " + Counts.ToString() + "件 共计: " + Amount.ToString() + "元 "));
tr_total.Cells.Add(tc_total);
barketTable.Rows.Add(tr_total);


}


}

[解决办法]
需要重新绑定吧
[解决办法]
页面没更新的问题可以通过重新对该控件进行数据绑定来解决
[解决办法]
if(!IsPostBack)
{
init_barket();
}
还需要对数据进行重新绑定!
[解决办法]
重新DataBind();
[解决办法]
重新把数据取出来进行数据绑定
[解决办法]
原来怎么绑定的,就再重复一次。
[解决办法]
重新绑定
[解决办法]
if(!IsPostBack)
{
init_barket();
}

[解决办法]
重新绑定
[解决办法]
需要修改的有两点
1 protected void Page_Load(object sender, EventArgs e)


{
if(!this.ispostback)
{
init_barket();
}
}
2 要在每次更新数据的按钮后添加 init_barket();
比如
protected void lb_delAll_Click(object sender, EventArgs e)
{
Order myOrder = new Order();
List <OrderInfo> myOrderInfoList = myOrder.GetOrdersByUser(UserName, isHandled);
foreach (OrderInfo myOrderInfo in myOrderInfoList)
{
myOrder.DeleteOrder(myOrderInfo.OrderID);
}
init_barket();
}

读书人网 >asp.net

热点推荐