what is your purpose? if you need to create controls on the fly based on an xml file, use a XmlTextReader, for example, if you have...<control type="textbox" Text="abc" /> <control type="button" Text="abc" /> ...you could do something like (pseudo code)XmlTextReader xtr = new XmlTextReader(....); while (xtr.Read()) { if (xtr.NodeType == XmlNodeType.Element) { if (xtr.LocalName == "control") { Control c = null; switch(xtr.GetAttribute("type")) { case "textbox": c = new TextBox(); break; case "button": c = new Button(); break; } if (c != null) form1.Controls.Add(c); } } }
<control type="button" Text="abc" />
...you could do something like (pseudo code)XmlTextReader xtr = new XmlTextReader(....);
while (xtr.Read())
{
if (xtr.NodeType == XmlNodeType.Element)
{
if (xtr.LocalName == "control")
{
Control c = null;
switch(xtr.GetAttribute("type"))
{
case "textbox": c = new TextBox();
break; case "button": c = new Button();
break; } if (c != null)
form1.Controls.Add(c);
}
}
}
<form>
<table>
<tr>
<td>
<label>请假人</label>
</td>
<td>
<text field="a" name="proposer" width="100" height="20" multiLine="false" validation="" validation_name="" example="" max_len="10" can_be_null="false" >
</text>
</td>
<td>
<label>年龄</label>
</td>
<td>
<text field="b" name="age" width="20" height="20" multiLine="false" validation="/d" validation_name="请输入数字" example="" max_len="0" can_be_null="false">
</text>
</td>
</tr>
<tr>
<td>
<label>性别</label>
</td>
<td colspan="3">
<radio name="sex" field="c">
<option>男</option>
<option>女</option>
</radio>
</td>
</tr>
<tr>
<td>
<label>所在部门</label>
</td>
<td colspan="3">
<select field="d" name="department" width="100" height="20" dropdown="true">
<!--<option_datasource table="uds_department" text="name" value="id"></opotion_datasource>-->
<option>市场部</option>
<option>研发部</option>
<option>财务部</option>
<option>生产部</option>
</select>
</td>
</tr>
<tr>
<td>
<label>请假日期</label>
</td>
<td>
<text field="e" name="date" width="20" height="20" multiLine="false" validation="" validation_name="请输入日期" example="" max_len="0" can_be_null="false">
</text>
</td>
<td>
<label>请假天数</label>
</td>
<td>
<text field="f" name="days" width="20" height="20" multiLine="false" validation="/d" validation_name="请输入数字" example="" max_len="3" can_be_null="false">
</text>
</td>
</tr>
<tr>
<td>
<label>详细理由</label>
</td>
<td colspan="3">
<text field="g" name="reason" width="200" height="150" multiLine="true" validation="" validation_name="" example="" max_len="0" can_be_null="true">
</text>
</td>
</tr>
<tr>
<td>
<label>爱好</label>
</td>
<td colspan="3">
<check field="h" name="favorite">
<option>唱歌</option>
<option>跳舞</option>
<option>游泳</option>
</check>
</td>
</tr>
</table>
</form>//thx
<%@ Import Namespace="System.Xml" %>
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
string sFile = Server.MapPath("form.xml");
StreamReader sr = new StreamReader(sFile, System.Text.Encoding.GetEncoding("GB2312"));
XmlTextReader xtr = new XmlTextReader(sr);
ProcessReader(xtr);
sr.Close();
}void ProcessReader(XmlTextReader reader)
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.LocalName.ToLower() == "form")
{
ProcessForm( reader, Page);
}
}
}void ProcessForm(XmlTextReader reader, Page p)
{
HtmlForm hf = new HtmlForm();
hf.ID = "form1";
p.Controls.Add(hf); ProcessChildren(reader, hf, "form");
}
void ProcessTable(XmlTextReader reader, Control cParent)
{
Table t = new Table();
cParent.Controls.Add(t); ProcessChildren(reader, t, "table");
}
void ProcessTR(XmlTextReader reader, Table t)
{
TableRow tr = new TableRow();
t.Rows.Add(tr); ProcessChildren(reader,tr, "tr");
}
void ProcessTD(XmlTextReader reader, TableRow tr)
{
TableCell td = new TableCell();
tr.Cells.Add(td); ProcessChildren(reader, td, "td");
}void ProcessLabel(XmlTextReader reader, Control c)
{
Label l = new Label();
c.Controls.Add(l);
l.Text = reader.ReadString();
}void ProcessText(XmlTextReader reader, Control c)
{
TextBox tb = new TextBox();
tb.ID = reader.GetAttribute("name");
if (reader.GetAttribute("multiLine").ToLower()=="true")
tb.TextMode = TextBoxMode.MultiLine;
c.Controls.Add(tb); //ProcessChildren(reader, tb, "text");
}void ProcessChildren(XmlTextReader reader, Control c, string strParentTagName)
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.EndElement && reader.LocalName.ToLower() == strParentTagName)
return; if (reader.NodeType == XmlNodeType.Element)
{
string str = reader.LocalName.ToLower();
switch(str)
{
case "text":
ProcessText(reader, c);
break; case "label":
ProcessLabel(reader, c);
break; case "table":
ProcessTable(reader, c);
break; case "tr":
ProcessTR(reader, (Table)c);
break; case "td":
ProcessTD(reader, (TableRow)c);
break; }
}
}
}
</script>