动态地添加文本框和捕获按钮点击数据 [英] add text box dynamically and capture data on button click
问题描述
我动态地添加文本框,并试图捕捉文本框中输入按钮的点击数据。但正在发生的事情是,虽然我输入的数据在文本框中,当我点击该按钮,页面加载得到,并且得到再次创建控件。其结果是,我失去在文本框中的数据。你能告诉我怎样才能捕捉到这些数据输入到动态创建的文本框。
我的示例code是如下:
保护无效的Page_Load(对象发件人,EventArgs的发送)
{
表tblTextboxes =新表();
的for(int i = 0;我小于10;我++)
{
TR的TableRow =新的TableRow();
TableCell的TC =新的TableCell();
文本框TB =新的TextBox();
tb.ID = i.ToString();
tc.Controls.Add(TB);
tr.Cells.Add(TC); TableCell的TC1 =新的TableCell();
LinkButton的LNK =新的LinkButton();
lnk.ID = i.ToString()+ tb.Text +LNK
lnk.Text =显示;
lnk.Click + =新的EventHandler(lnk_Click);
tc1.Controls.Add(LNK); tr.Cells.Add(TC1); tblTextboxes.Rows.Add(TR);
}
placeTest.Controls.Add(tblTextboxes);
}无效lnk_Click(对象发件人,EventArgs的发送)
{
LinkButton的LNK =发件人为LinkButton的;
标签LBL =新的Label();
lbl.Text =文本是+ lnk.ID;
placeTest.Controls.Add(LBL);
}
的LinkButton ID
每次输入文字时变为文本框
和后背部。
您想动态创建控件时,确保一件事是 - 你要当同一个ID创建它们回发
更新的解决方案(检索文本框的文本)
保护无效的Page_Load(对象发件人,EventArgs的发送)
{
VAR tblTextboxes =新表();
的for(int i = 0;我小于10;我++)
{
VAR TR =新的TableRow();
变种TC =新的TableCell();
VAR TB =新的TextBox {ID = i.ToString()};
tc.Controls.Add(TB);
tr.Cells.Add(TC); VAR TC1 =新的TableCell();
//这是一个修复 - lnk.ID = i.ToString()+ tb.Text +LNK
VAR LNK =新的LinkButton {ID = I +LNK文本=显示};
lnk.Click + = lnk_Click;
tc1.Controls.Add(LNK); tr.Cells.Add(TC1); tblTextboxes.Rows.Add(TR);
}
placeTest.Controls.Add(tblTextboxes);
}无效lnk_Click(对象发件人,EventArgs的发送)
{
VAR LNK =发件人为LinkButton的;
VAR LBL =新的Label();
lbl.Text =LinkButton的ID:+ lnk.ID; //从字符串数值
字符串ID = Regex.Replace(lnk.ID,@[^ \\ D],); //获取由ID TextBox控件
无功控制= FindControlRecursive(页,身份证); 如果(控制!= NULL)
{
VAR =文本框控件作为文本框;
lbl.Text + =文本框文字:+ textbox.Text;
} placeTest.Controls.Add(LBL);
}公共控制FindControlRecursive(控制根,字符串ID)
{
如果(root.ID == ID)
返回根; 返回root.Controls.Cast<控制>()
。选择(C => FindControlRecursive(C,ID))
.FirstOrDefault(C =以及c!= NULL);
}
I am adding text boxes dynamically and trying to capture data entered in text box on button click. but what is happening is , though I entered the data in the text box, when I clicked the button, the page is getting loaded and the control is getting created again. As a result , I am loosing the data in the text box. Can you tell me how can I capture this data entered to the dynamically created text boxes. My sample code is as follows:
protected void Page_Load(object sender, EventArgs e)
{
Table tblTextboxes = new Table();
for(int i=0;i<10;i++)
{
TableRow tr=new TableRow();
TableCell tc=new TableCell();
TextBox tb=new TextBox();
tb.ID=i.ToString();
tc.Controls.Add(tb);
tr.Cells.Add(tc);
TableCell tc1=new TableCell();
LinkButton lnk=new LinkButton();
lnk.ID=i.ToString()+tb.Text+"lnk";
lnk.Text = "Show";
lnk.Click+=new EventHandler(lnk_Click);
tc1.Controls.Add(lnk);
tr.Cells.Add(tc1);
tblTextboxes.Rows.Add(tr);
}
placeTest.Controls.Add(tblTextboxes);
}
void lnk_Click(object sender, EventArgs e)
{
LinkButton lnk=sender as LinkButton;
Label lbl=new Label();
lbl.Text="The text is"+lnk.ID;
placeTest.Controls.Add(lbl);
}
LinkButton ID
is changed every time you enter text into TextBox
and post back.
One thing you want to make sure when creating control dynamically is - you want to recreate them with same ID when post back.
Updated Solution (to retrieve text from TextBox)
protected void Page_Load(object sender, EventArgs e)
{
var tblTextboxes = new Table();
for (int i = 0; i < 10; i++)
{
var tr = new TableRow();
var tc = new TableCell();
var tb = new TextBox {ID = i.ToString()};
tc.Controls.Add(tb);
tr.Cells.Add(tc);
var tc1 = new TableCell();
// This is a fix for - lnk.ID=i.ToString()+tb.Text+"lnk";
var lnk = new LinkButton {ID = i + "lnk", Text = "Show"};
lnk.Click += lnk_Click;
tc1.Controls.Add(lnk);
tr.Cells.Add(tc1);
tblTextboxes.Rows.Add(tr);
}
placeTest.Controls.Add(tblTextboxes);
}
void lnk_Click(object sender, EventArgs e)
{
var lnk = sender as LinkButton;
var lbl = new Label();
lbl.Text = "LinkButton ID: " + lnk.ID;
// Get number value from string
string id = Regex.Replace(lnk.ID, @"[^\d]", "");
// Retrieves a TextBox control by ID
var control = FindControlRecursive(Page, id);
if (control != null)
{
var textbox = control as TextBox;
lbl.Text += "; TextBox Text: " + textbox.Text;
}
placeTest.Controls.Add(lbl);
}
public Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
return root;
return root.Controls.Cast<Control>()
.Select(c => FindControlRecursive(c, id))
.FirstOrDefault(c => c != null);
}
这篇关于动态地添加文本框和捕获按钮点击数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!