DataTable DT = new DataTable();
public void CreateCtrl()// {
DataSet ds = new DataSet();
if (File.Exists(this.pBDataWindowsFilePathAndName))
{
ds.ReadXmlSchema(pBDataWindowsFilePathAndNameSchema);//读取xmlschema
ds.ReadXml(this.pBDataWindowsFilePathAndName);//读取xml
ds.Tables[0].DefaultView.Sort = "x aSC";
DT = ds.Tables[0].DefaultView.ToTable();
for (int i = 0; i < DT.Rows.Count; i++)
{
l = new LRB_Label();
l.DataField = DT.Rows[i]["DataPropertyName"].ToString();
l.Text = DT.Rows[i]["text"].ToString();
l.Width = int.Parse(DT.Rows[i]["Columnwidth"].ToString()) / 4;
t = new TextBox();
t.ID = DT.Rows[i]["DataPropertyName"].ToString();
t.Width = int.Parse(DT.Rows[i]["Columnwidth"].ToString()) / 4;
this.Controls.Add(l);
this.Controls.Add(t);
}
}
}
上面是个web自定义控件的动态生成label跟textbox的代码。
怎么实现,才能让label跟textbox有个唯一的id,在使用控件时可以得到呀。。
我这样做
public string TXT_ID
{
get
{
return t.ID;
}
set
{
t.ID = value;
}
}
只能得到一个。
------解决方案--------------------------------------------------------
继承INameContainer接口.
这样只要在控件内部指定:
label.id = "lab";
textBox.id = "txt";
即可.
之后, Textbox的服务端UniqueID就是: this.ClientID + "$" + "txt;
TextBox的客户端ClientID就是:: this.ClientID + "_" + "txt;
到于前面设置的ID属性, 是我们起的名字, 如果设置重复, 编译器会报错, 不用担心命名重复问题.