如何将动态生成的控件对象显示到WEB表单上呀? TextBox box=new TextBox();box.Attributes.Add("style","left:20px;top:100px");this.Controls.Add(box); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 wrong, you need to do TextBox box=new TextBox();.....form1.Controls.Add(box);assuming:<form id=form1 runat=server> 我以前就试过Controls.Add()可是系统说“类型“TextBox”的控件“_ctl0”必须放在具有 runat=server 的窗体标记内。” 用 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); }} 在pane可以完成动态生成控件的显示,可是动态控制布局我还是不知道怎做?能否讲具体点,谢谢!而且pane在web表单中又如何控制其布局呢? 从一数据表中,读出若干条记录,然后成批的录入,再一次性提交。由于记录数是不定的,所以我要根据读出的记录数动态的生成TextBox让其输入,而且还得控制好各TextBox的布局。希望各位大侠指点迷津,谢了! 你可以设置 Panel 的宽度固定,然后长度根据返回的值来动态获得。至于组件内每个的具体位置,你可以采用相对于Panel 的坐标系。这只是一个简单的坐标系变换而已。 /// <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; }} 我是初学者,我看了一下panel的各属性,可是我找不到类似于left,top这样的属性, 可以通过style设置left,top等。 可是我为什么我用style.add("top","100px")设定无效,那textbox的位置没变化 txt1.Style["position"] = "absolute";txt1.Style["left"] = "200";txt1.Style["top"] = "100"; 用户控件,三个DROPDOWNLIST实现省市县的三级联动 ●●●●关于文件夹权限验证问题●●●● DataGrid显示问题 按回车键光标自动移到下一个文本框 Static函数在同一个目录下可以直接调用,但如果不在同一个目录下怎么调用 在线求网址URL正则表达式!!!! 找不到数据库文件,路径应该没问题,怎么回事? 请教选定dropdownlist控件的值之后,不用botton控件如何激活事件发生?在线 ArrayList中的问题: 关于一台电脑同时多个用户操作的问题!(在线给分!) 在线等待)关于动态添加控件显示问题? 请问怎么删除DataTable中的相同的行?
.....
form1.Controls.Add(box);assuming:<form id=form1 runat=server>
可是系统说“类型“TextBox”的控件“_ctl0”必须放在具有 runat=server 的窗体标记内。”
<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);
}
}
可是动态控制布局我还是不知道怎做?能否讲具体点,谢谢!
而且pane在web表单中又如何控制其布局呢?
/// 生成可合并单元格的表格
/// </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;
}
}
txt1.Style["left"] = "200";
txt1.Style["top"] = "100";