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静态变量