c#动态循环TextBox问题,望高手之路!! 本帖最后由 love560 于 2011-01-12 14:27:56 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 string a = ",序号,车号,姓名,联系方式"; string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None); for (int i = 1; i <= 3; i++) { Label lb = new Label(); lb.ID = "Label" + i.ToString(); TextBox txt = new TextBox(); txt.ID = "TextBox" + i.ToString(); lb.Text = "<br />"+s[i]; Panel1.Controls.Add(lb); Panel1.Controls.Add(txt); } 通过后台编程的方式可以直接实现。以下为前台<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>以下为后台textbox tb = new textbox()PlaceHolder1.controls.add(tb);思路就是这样。PlaceHolder 控件为一个空的容器,可以通过后台方式为它附加其它控件。 前台确定,但是前台的 TextBox 这个超多,所有不用生成,前台要拉很多TextBox ,麻烦的很! 怎么感觉拉的比你生产的快吧。。要不做个表把TextBox放repeater里面绑定上 string a = ",序号,车号,姓名,联系方式"; string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None); for (int i = 1; i <= 3; i++) { TextBox txt = new TextBox(); txt.ID = "TextBox" + i.ToString(); //txt.top = i * 20; Label la = new Label(); la.Text = s[i]; Panel1.Controls.Add(la); Panel1.Controls.Add(txt); Panel1.Controls.Add(new HtmlGenericControl("br")); } <%@ Page Language="C#" Debug="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { string a = ",序号,车号,姓名,联系方式"; string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None); for (int i = 1; i <= 3; i++) { TextBox txt = new TextBox(); txt.ID = "TextBox" + i.ToString(); //txt.top = i * 20; Label la = new Label(); la.Text = s[i]; Literal lt = new Literal(); lt.Text = "<br/>"; Panel1.Controls.Add(la); Panel1.Controls.Add(txt); Panel1.Controls.Add(lt); } }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <asp:Panel ID="Panel1" runat="server"> </asp:Panel> </form></body></html> string a = ",序号,车号,姓名,联系方式"; string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None); for (int i = 1; i <= 3; i++) { Label l = new Label(); TextBox txt = new TextBox(); txt.ID = "TextBox" + i; l.ID="label"+i; l.Text = s[i]; Panel1.Controls.Add(l); Panel1.Controls.Add(txt); Panel1.Controls.Add(new HtmlGenericControl("br")); } 或Literal liter = new Literal(); liter.Text = "<br />"; Panel1.Controls.Add(liter); string a = ",序号,车号,姓名,联系方式"; string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None); for (int i = 1; i <= 3; i++) { TextBox txt = new TextBox(); txt.ID = "TextBox" + i; txt.Text = i.ToString(); Label lbl = new Label(); lbl.ID = "lbl" + i; lbl.Text = "lbl" + i; Panel1.Controls.Add( lbl); Panel1.Controls.Add(txt); Literal li = new Literal(); li.Text = "<br/>"; Panel1.Controls.Add(li); } 完全按照<asp:Panel ID="Panel1" runat="server" Width="105px"> </asp:Panel> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>这样的代码结构的做法<%@ Page Language="C#" Debug="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { string a = ",序号,车号,姓名,联系方式"; string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None); for (int i = 1; i <= 3; i++) { TextBox txt = new TextBox(); txt.Text = s[i]; txt.ID = "TextBox" + i.ToString(); //txt.top = i * 20; Label la = ((Label)this.FindControl("label" + i)); la.Text = s[i]; Literal lt = new Literal(); lt.Text = "<br/>"; int il = GetControlIndex(la) + 1; form1.Controls.AddAt(il, lt); form1.Controls.AddAt(il, txt); } } private int GetControlIndex(Label l) { for (int i = 0; i < form1.Controls.Count; i++) { if (form1.Controls[i].ID == l.ID) return i; } return 0; }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <asp:Panel ID="Panel1" runat="server" Width="105px"> </asp:Panel> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label> </form></body></html> 如果你非要这样实现 那么建议你采用 asp:table控件 每一行设置两列 一个放你的lable一个就是textbox 完了之后添加新行 后台codestring a = ",序号,车号,姓名,联系方式"; string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None); int iRows = s.Length; for (int i = 0; i <iRows; i++) { TableRow tr = new TableRow(); for (int j = 0; j < 2; j++) { TableCell tc = new TableCell(); if (j == 0) { Label la = new Label(); la.Text = s[i]; tc.Controls.Add(la); tr.Cells.Add(tc); } if (j == 1) { TextBox txt = new TextBox(); tc.Controls.Add(txt); tr.Cells.Add(tc); } tbContent.Rows.Add(tr); } }前台code <div> <asp:Table ID="tbContent" runat="server"> </asp:Table> </div> 呀!高手就是多呀,问下这样实现代码怎么写呀?就是你说的怎么一行设置两列呀?还有个问题就是 我想控制下textbox的高,怎么设置呀? TextBox txt = new TextBox();txt.Height = "111px;";这样写为啥不对呀? 我还是不建议使用Tabel控件,表格不是用来布局的,一旦使用,你会发现界面会比较凌乱,布局还是采用DIV形式。最好还是用我的方法或者1楼的方法,用control.addat将用编程方式添加。 出错了CS0029: 无法将类型“string”隐式转换为“System.Web.UI.WebControls.Unit” 行 58: {行 59: TextBox txt = new TextBox();行 60: txt.Height = "111";//这个错误!行 61: tc.Controls.Add(txt);行 62: tr.Cells.Add(tc); 不知道怎么写了! 受不了你了,不用写双引号。 //private void BindPhoto() //{ // x_ExamRoom examroom = new x_ExamRoom(); // DataTable dt = examroom.GetExamAddressAllStudentList(yearTermID, examWeek, weekSection, roomID); // StringBuilder header = new StringBuilder(); // header.Append("<h2>考试地点学生名单(所有课程)</h2>"); // header.Append("<h3>考试地点:" + roomID); // header.Append(" "); // header.Append("监考1: "); // header.Append("监考2: "); // header.Append("考试时间: </h3>"); // int pagenum = 30; //每页30人 // int rownum = 6; //每行6人 // int page = (dt.Rows.Count%pagenum == 0)? dt.Rows.Count / pagenum : dt.Rows.Count / pagenum +1; // for (int j = 1; j <= page ; j++) //设置分页 // { // Literal lblTitle = new Literal(); // lblTitle.Text = header.ToString(); // PlaceHolder1.Controls.Add(lblTitle); // int currentPageNum = (j * pagenum <= dt.Rows.Count) ? pagenum : (dt.Rows.Count - j * pagenum); //获得当前页记录数 // int row = (currentPageNum % rownum == 0) ? currentPageNum / rownum : currentPageNum / rownum + 1; //获得当前页行数 // for (int i = 0; i < row; i++) // { // for (int s = 0; s < 6; s++) // { // Image imageurl = new Image(); // Literal lbControl = new Literal(); // lbControl.Text = "<div style='float:left;height:190px;width:130px;'>"; // imageurl.ImageUrl = @"../Student/jpg.aspx?StudID=" + Encrypt.EncryptDES(dt.Rows[s+i*rownum+(j - 1) * pagenum]["StudID"].ToString()); // imageurl.Width = 100 ; // imageurl.Height = 140; // Literal lbControlEnd = new Literal(); // StringBuilder studinfo = new StringBuilder(); // studinfo.Append(@"<div>"); // studinfo.Append(dt.Rows[s + i * rownum + (j - 1) * pagenum]["StudID"].ToString()); // studinfo.Append(" " + dt.Rows[s + i * rownum + (j - 1) * pagenum]["StudName"].ToString()); // studinfo.Append(@"</div></div>"); // lbControlEnd.Text = studinfo.ToString(); // PlaceHolder1.Controls.Add(lbControl); // PlaceHolder1.Controls.Add(imageurl); // PlaceHolder1.Controls.Add(lbControlEnd); // } // Literal lbBR = new Literal(); // lbBR.Text = @"<br />"; // PlaceHolder1.Controls.Add(lbBR); // } // if (j != page) // { // Literal lbPage = new Literal(); // lbPage.Text = @"<div style='visibility:hidden;clear:left;'><p class='PageNext'></p></div>"; // PlaceHolder1.Controls.Add(lbPage); // } // } //} imageurl.Width = 100 ;imageurl.Height = 140;这里设置高宽。 PlaceHolder1.Controls.Add(lbControl);PlaceHolder1.Controls.Add(imageurl);PlaceHolder1.Controls.Add(lbControlEnd);这里是向控件中添加控件的,就是后台编程添加控件 你可以在大Panel里先加三个小Panel,然后每个小Panel里面,分别加入一个Label和一个TextBoxPanel与Panel之间是会自动换行的 此贴不错,顶了。如果使用Input,而不是textbox的话,可以用request.form[""]这个也能实现。 追问:如果想要点击提交按钮后获取这些在后台添加的textbox 的Text,如何实现? ASP.NET reportviewer 打印首选项,默认纸张大小 画温度折线图、降水量柱状图用什么方法好,或者什么控件好? 如何合并两个相同结构的datatable 无线提供商是谁? vs2005中如何使用log4net环境是VS2005 + log4net (1.2.10) 如何对查询的结果进行合计? DATASET更新SQL2005问题. 给cssClass赋值的问题 无刷新按钮 关于显示和代码分离的问题 MVC2 学习 一点疑问 table布局问题
string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None);
for (int i = 1; i <= 3; i++)
{
Label lb = new Label();
lb.ID = "Label" + i.ToString();
TextBox txt = new TextBox();
txt.ID = "TextBox" + i.ToString();
lb.Text = "<br />"+s[i];
Panel1.Controls.Add(lb);
Panel1.Controls.Add(txt);
}
以下为前台
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
以下为后台textbox tb = new textbox()
PlaceHolder1.controls.add(tb);
思路就是这样。
PlaceHolder 控件为一个空的容器,可以通过后台方式为它附加其它控件。
前台确定,但是前台的 TextBox 这个超多,所有不用生成,前台要拉很多TextBox ,麻烦的很!
要不做个表把TextBox放repeater里面绑定上
string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None);
for (int i = 1; i <= 3; i++) {
TextBox txt = new TextBox();
txt.ID = "TextBox" + i.ToString(); //txt.top = i * 20;
Label la = new Label();
la.Text = s[i];
Panel1.Controls.Add(la);
Panel1.Controls.Add(txt);
Panel1.Controls.Add(new HtmlGenericControl("br"));
}
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
string a = ",序号,车号,姓名,联系方式";
string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None);
for (int i = 1; i <= 3; i++)
{
TextBox txt = new TextBox();
txt.ID = "TextBox" + i.ToString(); //txt.top = i * 20;
Label la = new Label();
la.Text = s[i];
Literal lt = new Literal();
lt.Text = "<br/>";
Panel1.Controls.Add(la);
Panel1.Controls.Add(txt);
Panel1.Controls.Add(lt);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
</form>
</body>
</html>
string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None);
for (int i = 1; i <= 3; i++)
{
Label l = new Label();
TextBox txt = new TextBox();
txt.ID = "TextBox" + i;
l.ID="label"+i;
l.Text = s[i];
Panel1.Controls.Add(l);
Panel1.Controls.Add(txt);
Panel1.Controls.Add(new HtmlGenericControl("br"));
}
Literal liter = new Literal();
liter.Text = "<br />";
Panel1.Controls.Add(liter);
string a = ",序号,车号,姓名,联系方式";
string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None);
for (int i = 1; i <= 3; i++) {
TextBox txt = new TextBox();
txt.ID = "TextBox" + i;
txt.Text = i.ToString();
Label lbl = new Label();
lbl.ID = "lbl" + i;
lbl.Text = "lbl" + i;
Panel1.Controls.Add( lbl);
Panel1.Controls.Add(txt);
Literal li = new Literal();
li.Text = "<br/>";
Panel1.Controls.Add(li);
}
<asp:Panel ID="Panel1" runat="server" Width="105px">
</asp:Panel>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
这样的代码结构的做法<%@ Page Language="C#" Debug="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
string a = ",序号,车号,姓名,联系方式";
string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None);
for (int i = 1; i <= 3; i++)
{
TextBox txt = new TextBox();
txt.Text = s[i];
txt.ID = "TextBox" + i.ToString(); //txt.top = i * 20;
Label la = ((Label)this.FindControl("label" + i));
la.Text = s[i];
Literal lt = new Literal();
lt.Text = "<br/>";
int il = GetControlIndex(la) + 1;
form1.Controls.AddAt(il, lt);
form1.Controls.AddAt(il, txt);
}
}
private int GetControlIndex(Label l)
{ for (int i = 0; i < form1.Controls.Count; i++)
{
if (form1.Controls[i].ID == l.ID) return i;
}
return 0;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Panel ID="Panel1" runat="server" Width="105px">
</asp:Panel>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
string[] s = a.Split(new string[1] { "," }, System.StringSplitOptions.None);
int iRows = s.Length;
for (int i = 0; i <iRows; i++)
{
TableRow tr = new TableRow(); for (int j = 0; j < 2; j++)
{
TableCell tc = new TableCell();
if (j == 0)
{
Label la = new Label();
la.Text = s[i];
tc.Controls.Add(la);
tr.Cells.Add(tc);
}
if (j == 1)
{
TextBox txt = new TextBox();
tc.Controls.Add(txt);
tr.Cells.Add(tc);
}
tbContent.Rows.Add(tr);
}
}
前台code
<div>
<asp:Table ID="tbContent" runat="server">
</asp:Table>
</div>
呀!高手就是多呀,问下这样实现代码怎么写呀?就是你说的怎么一行设置两列呀?
还有个问题就是 我想控制下textbox的高,怎么设置呀?
TextBox txt = new TextBox();
txt.Height = "111px;";
这样写为啥不对呀?
出错了
CS0029: 无法将类型“string”隐式转换为“System.Web.UI.WebControls.Unit”
行 58: {
行 59: TextBox txt = new TextBox();
行 60: txt.Height = "111";//这个错误!
行 61: tc.Controls.Add(txt);
行 62: tr.Cells.Add(tc);
不知道怎么写了!
受不了你了,不用写双引号。
//private void BindPhoto()
//{
// x_ExamRoom examroom = new x_ExamRoom();
// DataTable dt = examroom.GetExamAddressAllStudentList(yearTermID, examWeek, weekSection, roomID);
// StringBuilder header = new StringBuilder();
// header.Append("<h2>考试地点学生名单(所有课程)</h2>");
// header.Append("<h3>考试地点:" + roomID);
// header.Append(" ");
// header.Append("监考1: ");
// header.Append("监考2: ");
// header.Append("考试时间: </h3>");
// int pagenum = 30; //每页30人
// int rownum = 6; //每行6人
// int page = (dt.Rows.Count%pagenum == 0)? dt.Rows.Count / pagenum : dt.Rows.Count / pagenum +1;
// for (int j = 1; j <= page ; j++) //设置分页
// {
// Literal lblTitle = new Literal();
// lblTitle.Text = header.ToString();
// PlaceHolder1.Controls.Add(lblTitle);
// int currentPageNum = (j * pagenum <= dt.Rows.Count) ? pagenum : (dt.Rows.Count - j * pagenum); //获得当前页记录数
// int row = (currentPageNum % rownum == 0) ? currentPageNum / rownum : currentPageNum / rownum + 1; //获得当前页行数
// for (int i = 0; i < row; i++)
// {
// for (int s = 0; s < 6; s++)
// {
// Image imageurl = new Image();
// Literal lbControl = new Literal();
// lbControl.Text = "<div style='float:left;height:190px;width:130px;'>";
// imageurl.ImageUrl = @"../Student/jpg.aspx?StudID=" + Encrypt.EncryptDES(dt.Rows[s+i*rownum+(j - 1) * pagenum]["StudID"].ToString());
// imageurl.Width = 100 ;
// imageurl.Height = 140;
// Literal lbControlEnd = new Literal();
// StringBuilder studinfo = new StringBuilder();
// studinfo.Append(@"<div>");
// studinfo.Append(dt.Rows[s + i * rownum + (j - 1) * pagenum]["StudID"].ToString());
// studinfo.Append(" " + dt.Rows[s + i * rownum + (j - 1) * pagenum]["StudName"].ToString());
// studinfo.Append(@"</div></div>");
// lbControlEnd.Text = studinfo.ToString();
// PlaceHolder1.Controls.Add(lbControl);
// PlaceHolder1.Controls.Add(imageurl);
// PlaceHolder1.Controls.Add(lbControlEnd);
// }
// Literal lbBR = new Literal();
// lbBR.Text = @"<br />";
// PlaceHolder1.Controls.Add(lbBR);
// }
// if (j != page)
// {
// Literal lbPage = new Literal();
// lbPage.Text = @"<div style='visibility:hidden;clear:left;'><p class='PageNext'></p></div>";
// PlaceHolder1.Controls.Add(lbPage);
// }
// } //}
imageurl.Height = 140;
这里设置高宽。
PlaceHolder1.Controls.Add(imageurl);
PlaceHolder1.Controls.Add(lbControlEnd);这里是向控件中添加控件的,就是后台编程添加控件
Panel与Panel之间是会自动换行的