本帖最后由 JobiQ 于 2011-02-25 17:24:35 编辑

解决方案 »

  1.   

    每个TextBox占一行多好?为什么要这么排呢?
      

  2.   

    动态添加
    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;
      }
      

  3.   

    半夜起来告诉你怎么控制如何一行几个元素,具体代码自己添加吧//定义变量,每行2个元素
    int num_oneline=2;
    for(int i=0;i<TextBox数量;i++)
    {
        //在窗体添加控件     //下面一行控制换行
         if (i%num_oneline==0)
        {
           //输出一个换行符
        }
    }这是控制一行几个元素的。
    你可以用这个办法控制table一行2列了,你在每列中添加控件就整齐了呵呵
      

  4.   

    比如你首先动态创建Table,然后动态创建TableRow并插入Table,然后开始为TableRow内插入TableCell并插入Label和Text。当数量达到3个,就插入一个新的TableRow并插入Table,否则就继续还是使用这个TableRow继续插入TableCell.....
      

  5.   

    其实最好的做法往往不是编程的,编程的人去搞界面是很笨拙、不适合的。编程的人应该去做底层控件。你的这个换个思路,将Label和Text的实质变动的数据内容写入一个数据集中,然后绑定给一个DataList控件就一步到位做完了。不是去一味“撅着屁股”去做编码苦力,而应该使用别人做好的控件。
      

  6.   

    给你一个另外的解决方法
     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去遍历然后把值放在隐藏域里面然后再到后台去取
      

  7.   

    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个控件。自己根据需要修改一下就行了。
    控制关键:模除
      

  8.   

    是否可以考虑在添加一个Literal控件来换行(每行放两组)
                      Literal br1 = new Literal();
                    if(y>0 && y%2==0 ) 
                    {
                        Literal br1=new Literal();
                        br1.Text="<br>";
                        PlaceHolder1.Controls.Add(br1);
                    }    
    但PlaceHolder2中要实现换行需要再添加一个新的Literal控件,重复一遍如上操作。