TextBox box=new TextBox();
box.Attributes.Add("style","left:20px;top:100px");
this.Controls.Add(box);

解决方案 »

  1.   

    wrong, you need to do TextBox box=new TextBox();
    .....
    form1.Controls.Add(box);assuming:<form id=form1 runat=server>
      

  2.   

    我以前就试过Controls.Add()
    可是系统说“类型“TextBox”的控件“_ctl0”必须放在具有 runat=server 的窗体标记内。”
      

  3.   

    用 Panel 来定义位置,这样设计时也是调整位置
    <asp:Panel id="Panel_Left" runat="server"></asp:Panel>// 在页面加载的时候动态加载组件dll
    // 这里只是简单试例,没有缓存
    // 
    using System.Reflection;
    protected System.Web.UI.WebControls.Panel Panel_Left;
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    string filename = AppDomain.CurrentDomain.BaseDirectory.ToString()+@"bin/UserWebControlPanel.dll";
    Assembly a = Assembly.LoadFile(filename);
    object ww = a.CreateInstance("UserWebControlPanel.WebControlPanel");
    //给组件负值
    PropertyInfo pi1 = ww.GetType().GetProperty("UserName"); 
    pi1.SetValue(ww,@"aaaaa",null);
    //给组件负值
    PropertyInfo pi2 = ww.GetType().GetProperty("UserRoleID"); 
    pi2.SetValue(ww,1,null);
    System.Web.UI.Control ee = (System.Web.UI.Control)ww;
    ee.ID = "myControl";
    if (ee != null)
    {
    Panel_Left.Controls.Add(ee);
    }
    }
      

  4.   

    在pane可以完成动态生成控件的显示,
    可是动态控制布局我还是不知道怎做?能否讲具体点,谢谢!
    而且pane在web表单中又如何控制其布局呢?
      

  5.   

    从一数据表中,读出若干条记录,然后成批的录入,再一次性提交。由于记录数是不定的,所以我要根据读出的记录数动态的生成TextBox让其输入,而且还得控制好各TextBox的布局。希望各位大侠指点迷津,谢了!
      

  6.   

    你可以设置 Panel  的宽度固定,然后长度根据返回的值来动态获得。至于组件内每个的具体位置,你可以采用相对于Panel 的坐标系。这只是一个简单的坐标系变换而已。
      

  7.   

    /// <summary>
    /// 生成可合并单元格的表格
    /// </summary>
    /// <param name="dtsSource">欲绑定的DataSource</param>
    /// <param name="bEdit">表格是否可编辑</param>
    /// <returns>出错信息的串</returns>
    public string ComplexTable(DataSet dtsSource,bool bEdit)
    {
    panShow.Controls.Clear();


    Table tabTarget = new Table();
    tabTarget.GridLines = GridLines.Both;
    tabTarget.BorderStyle = BorderStyle.Solid;
    tabTarget.BorderWidth = 1;
    tabTarget.CellPadding = 3;
    tabTarget.CellSpacing = 0;
    tabTarget.Width = 1045;
    tabTarget.BorderColor = Color.FromArgb(20,120,235); tabTarget.Rows.Add(new TableRow());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    tabTarget.Rows[0].Cells.Add(new TableCell());
    // tabTarget.Rows[0].Cells.Add(new TableCell()); tabTarget.Rows[0].Cells[0].Text="绩效领域";
    tabTarget.Rows[0].Cells[1].Text="KSF";
    tabTarget.Rows[0].Cells[2].Text="KPI";
    tabTarget.Rows[0].Cells[3].Text="权重";
    tabTarget.Rows[0].Cells[4].Text="指标";
    tabTarget.Rows[0].Cells[5].Text="卓越指标";
    tabTarget.Rows[0].Cells[6].Text="考核标准";
    tabTarget.Rows[0].Cells[7].Text="努力KSF";
    tabTarget.Rows[0].Cells[8].Text="完成期限";
    tabTarget.Rows[0].Cells[9].Text="配合部门";
    tabTarget.Rows[0].Cells[10].Text="评估来源";
    // tabTarget.Rows[0].Cells[11].Text="备注";

    // tabTarget.Rows[0].Cells[11].Width = Unit.Pixel(100); // tabTarget.Rows[0].Cells[0].Width = Unit.Pixel(100);
    // tabTarget.Rows[0].Cells[1].Width = Unit.Pixel(150);
    // tabTarget.Rows[0].Cells[2].Width = Unit.Pixel(200);
    // tabTarget.Rows[0].Cells[3].Width = Unit.Pixel(50);
    tabTarget.Rows[0].HorizontalAlign = HorizontalAlign.Center;
    tabTarget.Rows[0].BackColor = Color.FromArgb(170,204,243);

    tabTarget.Rows[0].Height = Unit.Pixel(30); try
    {
    /***将DataSet绑定到表格中***/
    DataTable dtt = new DataTable();
    dtt = dtsSource.Tables[0]; //默认取DataSet中的第一个DataTable

    int iRows; //DataTable的行数
    int iColumns; //DataTable的列数 iRows=dtt.Rows.Count; //得到DataTable的行数
    // iColumns=dtt.Columns.Count-1; //得到DataTable的列数,不包含流水号列
    iColumns=3; for (int i=0;i<iRows;i++)
    {
    DataRow dr = dtt.Rows[i];
    TableRow r = new TableRow();
    for (int j=0;j<iColumns;j++)
    {
    DataColumn dc = dtt.Columns[j];
    TableCell c = new TableCell();
    c.ID = "Cell_" + i.ToString() + "_" + j.ToString();
    c.Text = dr[dc].ToString();
    r.HorizontalAlign=HorizontalAlign.Center;
    c.Width=Unit.Pixel(80);
    r.Cells.Add(c);
    }

    tabTarget.Rows.Add(r);
    }
            
    /***开始合并单元格***/
    string strTmp=null; //临时变量保存单元格值
    int iRowSpan=1; //拉伸到几个行高
    int iRowNo=0; //正在拉伸的行号
    int iColNo=0; //正在拉伸的列号 for (int i=0;i<iColumns;i++) //历遍绑定到表的所有列
    {
    strTmp="";
    for (int j=0;j<iRows+1;j++) //历遍绑定到表的所有行(单元格)
    {
    if (strTmp==tabTarget.Rows[j].Cells[i].Text.ToString().Trim()) //将临时变量与指定单元格的制进行比较
    {
    iRowSpan=iRowSpan+1;
    tabTarget.Rows[j].Cells[i].Visible=false; //隐藏当前单元格
    tabTarget.Rows[iRowNo].Cells[iColNo].RowSpan=iRowSpan; //上面的单元格在纵向改变为n个单元格的高度
    }
    else
    {
    iRowNo=j;
    iColNo=i;
    iRowSpan=1;
    strTmp=tabTarget.Rows[j].Cells[i].Text.ToString().Trim(); //将当前单元格的值赋给临时变量
    }
    }
    }
    /***合并完毕***/

    //添加明细项值 ViewState["id"]=""; for (int i=0;i<dtt.Rows.Count;i++)
    {
    for (int j=4;j<dtt.Columns.Count;j++)
    {
    TableCell dc = new TableCell();
    if (bEdit) //可编辑时
    {
    TextBox txtBox = new TextBox();
    txtBox.BorderStyle = BorderStyle.Solid;
    txtBox.BorderWidth = Unit.Pixel(1);
    //txtBox.Width = Unit.Pixel(55);
    switch (j)
    {
    case 5:
    txtBox.Width = Unit.Pixel(55);
    break;
    case 6:
    txtBox.Width = Unit.Pixel(55);
    break;
    case 7:
    txtBox.Width = Unit.Pixel(150);
    txtBox.TextMode = TextBoxMode.MultiLine;
    txtBox.Height = 32;
    txtBox.Style.Add("overflow","auto");
    break;
    case 8:
    txtBox.Width = Unit.Pixel(150);
    txtBox.TextMode = TextBoxMode.MultiLine;
    txtBox.Height = 32;
    txtBox.Style.Add("overflow","auto");
    break;
    case 9:
    txtBox.Width = Unit.Pixel(65);
    txtBox.TextMode = TextBoxMode.MultiLine;
    txtBox.Height = 32;
    txtBox.Style.Add("overflow","hidden");
    break;
    case 10:
    txtBox.Width = Unit.Pixel(150);
    txtBox.TextMode = TextBoxMode.MultiLine;
    txtBox.Height = 32;
    txtBox.Style.Add("overflow","auto");
    break;
    case 11:
    txtBox.Width = Unit.Pixel(150);
    txtBox.TextMode = TextBoxMode.MultiLine;
    txtBox.Height = 32;
    txtBox.Style.Add("overflow","auto");
    break;
    }
    txtBox.Font.Size= 9;
    txtBox.CssClass="text3";
    // if (j!=9)
    // {
    // txtBox.Attributes["onmouseover"] = "this.select();";
    // }
    txtBox.ID = "txt_"+dtt.Rows[i][3].ToString()+"_"+j.ToString();
    txtBox.Text = dtt.Rows[i][j].ToString();
    if (j==4) //将第四列转换为百分数
    {
    txtBox.Width = Unit.Pixel(30);
    txtBox.Attributes["onblur"] = "if (this.value!='' && this.value.indexOf('%')==-1) {this.value=this.value+'%'}";
    txtBox.MaxLength = 2;
    if (dtt.Rows[i][j].ToString()!="")
    {
    txtBox.Text = (Convert.ToDouble(dtt.Rows[i][j].ToString())*100).ToString()+"%";
    }
    }
    if (j==4 || j==5 || j==6)
    {
    oCheck.CheckNum(this,txtBox,true);
    }
    if (j==9)
    {
    oCheck.CheckSetDay(this,txtBox);
    if (dtt.Rows[i][j].ToString()!="") //将第9列时间转换为指定格式
    {
    txtBox.Text = ((DateTime)dtt.Rows[i][j]).ToString("yyyy-MM-dd");
    }
    }
    //txtBox.Style.Add("Text-Align","Center");
    txtBox.ToolTip = txtBox.Text;
    dc.Controls.Add(txtBox);
    }
    else //不可编辑时
    {
    if (dtt.Rows[i][j].GetType().ToString()=="System.DateTime") //将DateTime的值转换为需要的格式
    {
    dc.Text = ((DateTime)dtt.Rows[i][j]).ToString("yyyy-MM-dd");
    }
    else
    {
    dc.Text = dtt.Rows[i][j].ToString();
    }
    if (j==4 && dtt.Rows[i][j].ToString()!="")
    {
    dc.Text = (Convert.ToDouble(dtt.Rows[i][j].ToString())*100).ToString()+"%";
    }
    }

    tabTarget.Rows[i+1].Cells.Add(dc);
    }

    ViewState["id"]=ViewState["id"]+dtt.Rows[i][3].ToString()+",";
    }
    //将每条纪录的流水号存放到ViewState中
    if (ViewState["id"].ToString()!="")
    {
    ViewState["id"]=ViewState["id"].ToString().Substring(0,ViewState["id"].ToString().Length-1);
    } this.panShow.Controls.Add(tabTarget);

    return "";
    }
    catch (Exception e)
    {
    this.panShow.Controls.Add(tabTarget);
    return e.Message;
    }
    }
      

  8.   

    我是初学者,我看了一下panel的各属性,可是我找不到类似于left,top这样的属性,
      

  9.   

    可以通过style设置left,top等。
      

  10.   

    可是我为什么我用style.add("top","100px")设定无效,那textbox的位置没变化
      

  11.   

    txt1.Style["position"] = "absolute";
    txt1.Style["left"] = "200";
    txt1.Style["top"] = "100";