ASP.NET动态生成输入页面,以及生成控件的大小控制,输入数据的验证等
有时根据选择不同的数据表,要生成不同的输入页面,这些数据表的结构各不相同,这时就要动态输出控件组成输入页面了,把这些表的结构放在一个专门的TYPE表里,如中英文字段名称,类型,大小,中英文表名称等。 首先在页面上放置一个TABLE控件,放置一个DropDownList控件,DropDownList绑定数据库中要生成输入页面的表名称。 生成页面代码如下: cnn.open(); int cellw; string type; string Sql ="select CHINANAME,HOW,TYPE from Type where OWNER ='" + DropDownList1.SelectedValue +"'"; OleDbDataAdapter myDa =new OleDbDataAdapter(); myDa.SelectCommand =new OleDbCommand(Sql,cnn); DataSet myDs =new DataSet(); myDa.Fill(myDs,"Type"); for(int i=0; i<myDs.Tables[0].Rows.Count; i++) { TableRow newrow=new TableRow(); TableCell newcell1=new TableCell(); TableCell newcell2=new TableCell(); TableCell newcell3=new TableCell();
Label myLab =new Label(); myLab.ID = "Labe" + i.ToString(); myLab.Text = ""+myDs.Tables[0].Rows[i].ItemArray.GetValue(0).ToString()+":"; myLab.EnableViewState =true; myLab.Width = 100;
TextBox myTxt =new TextBox(); myTxt.ID = "Txt" + i.ToString(); myTxt.EnableViewState=true; type = myDs.Tables[0].Rows[i].ItemArray.GetValue(2).ToString();
cellw = int.Parse(myDs.Tables[0].Rows[i].ItemArray.GetValue(1).ToString()); if(cellw<=50) { myTxt.Height = 24; myTxt.Width = 400; } if(cellw>50&&cellw<=100) { myTxt.Height = 50; myTxt.Width = 400; myTxt.TextMode = TextBoxMode.MultiLine; } if(cellw>100&&cellw<=200) { myTxt.Height = 60; myTxt.Width = 400; myTxt.TextMode = TextBoxMode.MultiLine; } if(cellw>200&&cellw<=500) { myTxt.Height = 80; myTxt.Width = 400; myTxt.TextMode = TextBoxMode.MultiLine; }
newcell1.Controls.Add(myLab); newrow.Cells.Add(newcell1); newcell2.Controls.Add(myTxt); newrow.Cells.Add(newcell2);
if(type=="decimal") { RegularExpressionValidator rev =new RegularExpressionValidator(); rev.ID = "rev" + i.ToString(); rev.ErrorMessage = "本行只能填写数字,请从新输入!" ; rev.ControlToValidate = "Txt"+i.ToString()+""; rev.ValidationExpression = @"\d+(\.\d+)?$"; rev.Width = 250; newcell3.Controls.Add(rev); newrow.Cells.Add(newcell3); }
Table1.Rows.Add(newrow); } myDs.Clear(); cnn.Close();
把生成页面输入的数据保存到数据库: string strsql ="insert into "+bm+" ("; try { for(int i=0; i<myDs.Tables[0].Rows.Count; i++) { strsql = strsql + myDs.Tables[0].Rows[i].ItemArray.GetValue(1).ToString() +","; } strsql = strsql.Substring(0,strsql.Length-1) +") values ("; for(int i=0; i<myDs.Tables[0].Rows.Count; i++) { TextBox myTxt = (TextBox)Table1.FindControl("Txt"+i.ToString()); strsql = strsql + "'" + myTxt.Text.Replace("'","''") + "',"; } strsql = strsql.Substring(0,strsql.Length-1) +")";
OleDbCommand myCommand=new OleDbCommand(strsql,cnn); myCommand.ExecuteNonQuery();
} catch {
}

|