就是页面里面的button的个数不确定,要动态的添加添加n个,基本思路是用controls.add()事件。因为想排的整齐一点,所以事先在前台拖拽了个table
<asp:Table ID="Table1" runat="server" BorderWidth="0" BorderStyle="None" Width="100%" EnableViewState="False"> </asp:Table>
然后5个一行加linkbutton(button)
View Code
DbHelper dbhelper = ConnMgr.getDbHelp(); string strsql = "select szmc,id from shizheng ORDER BY NLSSORT(szmc,'NLS_SORT = SCHINESE_PINYIN_M')"; DataTable dt = new DataTable(); dbhelper.FillDataSetTable(strsql, dt); dbhelper.Close(); //检索出所有的市政 Table1.Rows.Clear(); int glmcnum = dt.Rows.Count; int k = 0; for (int i = 0; i < (glmcnum - 1) / 5 + 1; i++) { TableRow r = new TableRow(); for (int j = 0; j < 5; j++) { if (k < glmcnum) { TableCell c = new TableCell(); LinkButton lb = new LinkButton(); lb.ID = "lbsz" + k.ToString(); lb.Text = dt.Rows[k]["szmc"].ToString(); lb.Attributes["id"] = dt.Rows[k]["id"].ToString(); lb.Attributes["szmc"] = dt.Rows[k]["szmc"].ToString(); lb.Click += new EventHandler(lb_Click); c.Controls.Add(lb); r.Cells.Add(c); k++; } } Table1.Rows.Add(r); //每行显示5个显示显示所有的工点 } return dt;
void lb_Click(object sender, EventArgs e) { LinkButton lb = sender as LinkButton; string id = lb.Attributes["id"]; //自己的代码 //throw new NotImplementedException(); }
要强调的是:一定要给每个linkbutton添加id属性,不然会引起预料之外的后果。
我就因为这个调试了好几天。
ps:那些事件啊,lb.Attributes啊其实都是假象。http协议下是无状态的。点一个按钮实际上是页面回传,先执行pageload再执行lb_click,object sender什么的也不要信,lb_click并没有把原来的button真的作为一个object传给事件。事实上asp.net把事件什么的编成了一个js文件,里面有很多函数。我们的lb.Attributes实际被当做参数传给了相应的js函数。如果两个button在页面回传时的page_load过程中id换了,那么他们传的参数也会互换。所以你自己生成的button一定自己就把id写死了,不然页面会自动给它分配id,而并不能保证页面回传后它被分配的id还是一样的。