网页面里动态添加linkbutton或者button

就是页面里面的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还是一样的。

posted @ 2012-08-19 09:58  骑着鱼去飞  阅读(417)  评论(0编辑  收藏  举报

我的QQ:597014772