TextBox失去焦点时,自动生成一行

上一篇写的是点击加号自动生成一行,这篇做了一个改进,让TextBox失去焦点时,自动生成一行。同时满足:同一文本框再次触发或者同一行的文本框触发事件是不会生成多余的行。

效果如下:


createTr( )是根据 ViewState["tdNum"]动态生成控件的方法。动态生成的文本框控件时给添加一个OnChange事件。

     protected void CreateTr(int i)
     {
         ViewState["tdNum"] = i;
         TableRow row = new TableRow();
         TableCell cell0 = new TableCell();
         TextBox tb = new TextBox { ID = "txtName" + i + "", Width = Unit.Parse("60px"), AutoPostBack = true};
         tb.TextChanged += new System.EventHandler(tb_OnChange);
         cell0.Controls.Add(tb);
         row.Cells.Add(cell0);
         TableCell cell1 = new TableCell();
         tb = new TextBox { ID = "txtMode" + i + "", Width = Unit.Parse("60px"), AutoPostBack = true };
         tb.TextChanged += new System.EventHandler(tb_OnChange);
         cell1.Controls.Add(tb);
         。。。。。
         row.Cells.Add(cell1); HolderTable.Rows.Add(row);
      }

下面是该事件的方法:

    protected void tb_OnChange(object sender, EventArgs e)
    {
        TextBox tb = (TextBox)sender;
        string name = tb.ID;
        string num = name.Substring(name.Length-1, 1);
        if (Convert.ToInt16(ViewState["tdNum"]) <= Convert.ToInt16(num))
        {
            CreateTr(Convert.ToInt16(num) + 1);
        }
    }
其中
 if (Convert.ToInt16(ViewState["tdNum"]) <= Convert.ToInt16(num))
是要保证不会添加ID号重复的控件。

比如textName1触发了tb_OnChange事件,生成了ID后缀都是2的一行,txtMode1触发tb_OnChange事件时,又会生成ID后缀都是2的一行。导致ID号重复,会出错。

因为触发事件后传回服务器时,原来已动态加载的数据会全部丢失,所以要在pageLoad里重新加载一遍:

    protected void Page_Load()
    {
        if (ViewState["tdNum"] == null)
        {
            ViewState["tdNum"] = 1;
        }
        int tdNum = Convert.ToInt16(ViewState["tdNum"]);
        for (int i = 1; i <= tdNum; i++)
        {
            CreateTr(i);
        }
    }
This is all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值