首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

为什么页面重新加载后,dataset或datatable会为空?解决方法

2012-03-29 
为什么页面重新加载后,dataset或datatable会为空?像这样定义datatable,然后,在按钮的点击事件bFindSave_Cl

为什么页面重新加载后,dataset或datatable会为空?
像这样定义datatable,然后,在按钮的点击事件bFindSave_Click中,datatable内容却为空了,这是怎么回事?
 public partial class AuthorizePurchaseOrder : Page
  {
  private readonly DatabaseHelper db = new DatabaseHelper();
  private DataTable dt = new DataTable();

protected void FindPurchase(string Condition)
  {
  var sb = new StringBuilder();
  sb.Append("select code,b.realname Petitioner,c.realname,applydate,recorddate");
  sb.Append(
  ",(case state when 0 then '未提交' when 1 then '已提交' when 2 then '已审核' when 3 then '已完成' when 10 then '已作废' end ) state");
  sb.Append(",state stateid");
  sb.Append(" from tb_Purchase a,tb_user b,tb_user c");
  sb.Append(" where a.petitioner=b.userid and a.userid=c.userid");
  sb.Append(Condition);
  dt1 = db.ExecuteDataSet(sb.ToString()).Tables[0];
  uwgPurchase.DataKeyField = "code";
  dt1.PrimaryKey = new[] {dt1.Columns["code"]};

  uwgPurchase.DataBind();
  ViewState["dt1"] = dt1;
  }

  protected void Page_Load(object sender, EventArgs e)
  {
  if (!IsPostBack)
  {

  FindPurchase("");  
  }
  }

 protected void bFindSave_Click(object sender, EventArgs e)
  {
  var sb = new StringBuilder();
  foreach (DataRow c in dt1.Rows) //此时,dt1为空了。
  {
  switch (c.RowState)
  {
  case (DataRowState.Added):
  break;
  case (DataRowState.Modified):
  // sb.Append(" update tb_Purchase set state=1 where code='"+c.Cells.FromKey("code")+"' and state=0");
  break;
  case (DataRowState.Deleted):
  sb.Append(" delete from tb_Purchase where code='" + c["code",DataRowVersion.Original] + "' and state=0");
  sb.Append(" delete from tb_PurchaseList where code='" + c["code", DataRowVersion.Original] + "'");
  break;
  }
  }
  var id = Convert.ToInt32(hfID.Value);

  foreach (DataRow c in dt.Rows)
  {
  switch (c.RowState)
  {
  case (DataRowState.Added):
  id++;
  sb.Append(" insert into tb_PurchaseList(code,id,commoditycode,quantity,comment)");
  sb.Append(" values('" + hfCode.Value + "'," + id + ",'" + c["code"] + "'," +
  c["quantity"]);
  sb.Append(",'" + c["comment"] + "')");
  break;
  case (DataRowState.Modified):
  sb.Append(" update tb_PurchaseList");
  sb.Append(" set CommodityCode='" + c["code"] + "'");
  sb.Append(",quantity=" + c["quantity"] + ",comment='" + c["comment"] +


  "'");
  sb.Append(" where code='" + hfCode.Value + "'");
  sb.Append(" and id=" + c["id"]);
  break;
  case (DataRowState.Deleted):
  sb.Append(" delete from tb_purchaselist");
  sb.Append(" where code='" + hfCode.Value + "'");
  sb.Append(" and id=" + c["id", DataRowVersion.Original]);
  break;
 
  }
  }
  if (sb.Length>0)
  db.ExecuteNonQuery(sb.ToString());

  }

  }

[解决办法]
protected void Page_Load(object sender, EventArgs e) 

// !IsPostBack 只有第一次加载页面时执行里面的代码,如果你的按钮要多次点击都想有DataTable 就不能用 IsPostBack
//if (!IsPostBack) 
//{ 
FindPurchase("");
// } 
 } 
另外你声明的貌似是 private DataTable dt = new DataTable(); 
而 赋值的却是 dt1 = db.ExecuteDataSet(sb.ToString()).Tables[0]; 
没有报错吗?

热点排行