日期:2014-05-18  浏览次数:20863 次

Click += new EventHandler事件的取值问题
现用户有一数据表格如下:

id 书名 价格 操作
1 A 10 选择
2 b 28 选择
3 c 39 选择

从库中选出如上表格中数据,点“选择”,出现填写订购信息输入框等,要求得到书的ID号,并和订购信息一并存入数据库中,单人操作时没有问题,可以得到ID,存储一切正常,但当两个人同时运行这个程序时,ID就总是取到最后点击book_Click的那个ID,比如A先进入book.aspx,并点击了ID为1的书,这时B也在另外一台机器上点击进入book.aspx,点击选择ID为2的BOOK,这时如果A填写完了订购信息,点击保存,存入库中的是ID为2的书,A用户应该选择的是ID=1,显然系统取的是最后一次点击book_click取到的值,为什么呢?请大侠赐教?代码如下:


 protected void fill_tb()
  {
  Table2.Rows.Clear(); TableRow tr; TableHeaderCell th; TableCell tc;

  #region 填充表头
  tr = new TableRow();

  th = new TableHeaderCell();
  th.Text = "ID";
  tr.Cells.Add(th);

  th = new TableHeaderCell();
  th.Text = "书名";
  tr.Cells.Add(th);

  th = new TableHeaderCell();
  th.Text = "价格";
  tr.Cells.Add(th);

  th = new TableHeaderCell();
  th.Text = "操作";
  tr.Cells.Add(th);

  Table2.Rows.Add(tr);
  #endregion

   
  string sql ="select id,bookname,price from book ";
  DataSet dst = DBCommand.ExecuteDataSet(sql, "tab");
  int nums = dst.Tables[0].Rows.Count;


  for (int i = 0; i < nums; i++)
  {
  #region 数据行
  tr = new TableRow();
  tr.HorizontalAlign = HorizontalAlign.Center;
  tc = new TableCell();
  tc.Text = dst.Tables[0].Rows[i]["id"].ToString();
  tr.Cells.Add(tc);//

  tc = new TableCell();
  tc.Text = dst.Tables[0].Rows[i]["bookname"].ToString();
  tr.Cells.Add(tc);//作业项目

  tc = new TableCell();
  tc.Text = dst.Tables[0].Rows[i]["price"].ToString();
  tr.Cells.Add(tc);//责任人

  tc = new TableCell();
  LinkButton lkbtn = new LinkButton();
  lkbtn.ID = dst.Tables[0].Rows[i]["id"].ToString();
  lkbtn.Text = "操 作";

  lkbtn.Click += new EventHandler(book_Click);
  tc.Controls.Add(lkbtn);
  tr.Cells.Add(tc);

  Table2.Rows.Add(tr);
  #endregion
  }
  dst.Dispose();

  }  

protected void book_Click(object sender, EventArgs e) //点击事件
  {
  LinkButton btn = sender as LinkButton;

  bookid=Convert.ToInt32(btn.ID.ToString());
   
  Fill_db();//显示详单
   
  }


------解决方案--------------------
bookid 不要设置为static静态变量