怎样在WEB页面上 控制"动态添加生成的控件" 每行显示的数量? 本帖最后由 JobiQ 于 2011-02-25 17:24:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 每个TextBox占一行多好?为什么要这么排呢? 动态添加protected void Page_Load(object sender, EventArgs e) { object count = ViewState["count"] ?? "0"; int index; int.TryParse(count.ToString(), out index); TextBox txt; LiteralControl litc; for (int i = 0; i < index; i++) { txt = new TextBox(); txt.ID = string.Format("txt{0}", i); txt.Text = (i + 1).ToString(); ph.Controls.Add(txt); litc = new LiteralControl("<br />"); ph.Controls.Add(litc); } } protected void lbtnAdd_Click(object sender, EventArgs e) { object count = ViewState["count"] ?? "0"; int index; int.TryParse(count.ToString(), out index); TextBox txt = new TextBox(); txt.ID = string.Format("txt{0}", index); txt.Text = (index + 1).ToString(); ph.Controls.Add(txt); ViewState["count"] = index + 1; } 半夜起来告诉你怎么控制如何一行几个元素,具体代码自己添加吧//定义变量,每行2个元素int num_oneline=2;for(int i=0;i<TextBox数量;i++){ //在窗体添加控件 //下面一行控制换行 if (i%num_oneline==0) { //输出一个换行符 }}这是控制一行几个元素的。你可以用这个办法控制table一行2列了,你在每列中添加控件就整齐了呵呵 比如你首先动态创建Table,然后动态创建TableRow并插入Table,然后开始为TableRow内插入TableCell并插入Label和Text。当数量达到3个,就插入一个新的TableRow并插入Table,否则就继续还是使用这个TableRow继续插入TableCell..... 其实最好的做法往往不是编程的,编程的人去搞界面是很笨拙、不适合的。编程的人应该去做底层控件。你的这个换个思路,将Label和Text的实质变动的数据内容写入一个数据集中,然后绑定给一个DataList控件就一步到位做完了。不是去一味“撅着屁股”去做编码苦力,而应该使用别人做好的控件。 给你一个另外的解决方法 int x = Int32.Parse(idtext.Text); int z = 1; StringBuilder roleHTML = new StringBuilder(); roleHTML.Append("<table style=\"FONT-SIZE: 12px\" width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\"> \n"); for (int y = 0; y < x; y++) { int i = y + 1; roleHTML.Append("<tr> \n"); roleHTML.Append("<td height=\"30\" >第" + i.ToString() + "层网络点</td> \n"); roleHTML.Append("<td height=\"30\" ><input name=\"checkye\" type=\"text\" id=\"checkye\" value=\"" + "" + "\" ></td> \n"); roleHTML.Append("<td height=\"30\" >第" + i.ToString() + "层语音点</td> \n"); roleHTML.Append("<td height=\"30\" ><input name=\"checkye\" type=\"text\" id=\"checkye\" value=\"" + "" + "\" ></td> \n"); roleHTML.Append("</tr> \n"); //TextBox floorData = new TextBox(); //TextBox floorVoice = new TextBox(); //Label labelData = new Label(); //Label labelVoice = new Label(); //int i = y + 1; //floorData.ID = "floorData" + i.ToString(); //floorVoice.ID = "floorVoice" + i.ToString(); //labelData.ID = "labelData" + i.ToString(); //labelVoice.ID = "labelVoice" + i.ToString(); //labelData.Text = "第" + i.ToString() + "层网络点"; //labelVoice.Text = "第" + i.ToString() + "层语音点"; //floorData.Width = 85; //floorVoice.Width = 85; //this.Page.Controls //sb.Append(labelData); //sb.Append("</br>"); //sb.Append(floorData); //sb.Append("</br>"); //sb.Append(labelVoice); //sb.Append("</br>"); //sb.Append(floorVoice); //form1.Controls.Add(labelData); //form1.Controls.Add(floorData); //form1.Controls.Add(labelVoice); //form1.Controls.Add(floorVoice); z++; } roleHTML.Append("</table> \n"); this.blstr.Text = roleHTML.ToString();不过你要是想取得文本框的值的话 就得用js去遍历然后把值放在隐藏域里面然后再到后台去取 asp.net的web开发我不熟悉,我给你介绍一下asp的设定一行几个元素的方法吧:HTML标记语言的 <table> <tr> <% for(int i=0;i<TextBox数量;i++) { //输出元素 Response.Write("<td>"+元素+"</td>"); //%后的2表示每行2个控件,%后跟数字几就是每行几个控件 if (i%2==0) { Response.Write("</tr>"); } } %> </table>上面的代码你直接复制过去肯定有错误,只是表示如何控制每行仅允许有2个控件。自己根据需要修改一下就行了。控制关键:模除 是否可以考虑在添加一个Literal控件来换行(每行放两组) Literal br1 = new Literal(); if(y>0 && y%2==0 ) { Literal br1=new Literal(); br1.Text="<br>"; PlaceHolder1.Controls.Add(br1); } 但PlaceHolder2中要实现换行需要再添加一个新的Literal控件,重复一遍如上操作。 C#导入Excel 公式问题 高分求助 C#编写 用电脑发送手机短信息 ASP.NET程序web服务器控件出错 如何自动点击MessageBox中的"确定"按键 有关.net中的三种定位模式的问题,回复者有分 我想把一个数据库中的数据插入另一个数据库,谁知道比较好的方法 SQLPLUS执行SQL文件问题 哪位高手能帮我写个医院挂号软件? DataGrid中如何加入Combox? 多语言混合编程 如何将mdb文件加载到exe文件里? 调试错误,但实际已经执行,代码哪里错误,帮忙看看
protected void Page_Load(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt;
LiteralControl litc;
for (int i = 0; i < index; i++)
{
txt = new TextBox();
txt.ID = string.Format("txt{0}", i);
txt.Text = (i + 1).ToString();
ph.Controls.Add(txt);
litc = new LiteralControl("<br />");
ph.Controls.Add(litc);
} }
protected void lbtnAdd_Click(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt = new TextBox();
txt.ID = string.Format("txt{0}", index);
txt.Text = (index + 1).ToString();
ph.Controls.Add(txt);
ViewState["count"] = index + 1;
}
int num_oneline=2;
for(int i=0;i<TextBox数量;i++)
{
//在窗体添加控件 //下面一行控制换行
if (i%num_oneline==0)
{
//输出一个换行符
}
}这是控制一行几个元素的。
你可以用这个办法控制table一行2列了,你在每列中添加控件就整齐了呵呵
int x = Int32.Parse(idtext.Text);
int z = 1;
StringBuilder roleHTML = new StringBuilder();
roleHTML.Append("<table style=\"FONT-SIZE: 12px\" width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\"> \n");
for (int y = 0; y < x; y++)
{
int i = y + 1;
roleHTML.Append("<tr> \n");
roleHTML.Append("<td height=\"30\" >第" + i.ToString() + "层网络点</td> \n");
roleHTML.Append("<td height=\"30\" ><input name=\"checkye\" type=\"text\" id=\"checkye\" value=\"" + "" + "\" ></td> \n");
roleHTML.Append("<td height=\"30\" >第" + i.ToString() + "层语音点</td> \n");
roleHTML.Append("<td height=\"30\" ><input name=\"checkye\" type=\"text\" id=\"checkye\" value=\"" + "" + "\" ></td> \n");
roleHTML.Append("</tr> \n");
//TextBox floorData = new TextBox();
//TextBox floorVoice = new TextBox();
//Label labelData = new Label();
//Label labelVoice = new Label();
//int i = y + 1;
//floorData.ID = "floorData" + i.ToString();
//floorVoice.ID = "floorVoice" + i.ToString();
//labelData.ID = "labelData" + i.ToString();
//labelVoice.ID = "labelVoice" + i.ToString();
//labelData.Text = "第" + i.ToString() + "层网络点";
//labelVoice.Text = "第" + i.ToString() + "层语音点";
//floorData.Width = 85;
//floorVoice.Width = 85;
//this.Page.Controls
//sb.Append(labelData);
//sb.Append("</br>");
//sb.Append(floorData);
//sb.Append("</br>");
//sb.Append(labelVoice);
//sb.Append("</br>");
//sb.Append(floorVoice);
//form1.Controls.Add(labelData);
//form1.Controls.Add(floorData);
//form1.Controls.Add(labelVoice);
//form1.Controls.Add(floorVoice);
z++;
}
roleHTML.Append("</table> \n");
this.blstr.Text = roleHTML.ToString();不过你要是想取得文本框的值的话 就得用js去遍历然后把值放在隐藏域里面然后再到后台去取
HTML标记语言的 <table>
<tr>
<%
for(int i=0;i<TextBox数量;i++)
{
//输出元素
Response.Write("<td>"+元素+"</td>");
//%后的2表示每行2个控件,%后跟数字几就是每行几个控件
if (i%2==0)
{
Response.Write("</tr>");
}
}
%>
</table>
上面的代码你直接复制过去肯定有错误,只是表示如何控制每行仅允许有2个控件。自己根据需要修改一下就行了。
控制关键:模除
Literal br1 = new Literal();
if(y>0 && y%2==0 )
{
Literal br1=new Literal();
br1.Text="<br>";
PlaceHolder1.Controls.Add(br1);
}
但PlaceHolder2中要实现换行需要再添加一个新的Literal控件,重复一遍如上操作。