求助高手们,动态生成控件代码怎么写!十万火急啊!!! 本帖最后由 mayues 于 2011-05-10 09:58:42 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用一个Repeater绑定下拉框和文本框点击button1,在button的事件里面对repeater进行绑定,动态生成点击button2也是一样,重新绑定repeater,达到删除的目的 gridview + viewstate(DataTable) 结合绑定可以做出这种效果。第三方也可以。jqgrid. 最好还是js处理,但是加的不是服务器控件了或者用viewstate,感觉对客户不友好 用个table吧,在JS里写var tr = table.insertRow();//增加行var td=tr.insertCell();//增加列table.deleteRow(....);//删除行 就用 js做呗循环添加 文本框 和 2个 select 而已删除的化,直接 删除一个 tr。多方便的东西, 搞的这么麻烦。 给你个代码参考下前台<table cellpadding="0" cellspacing="0" style="font-size: 12px; text-align: center; border: solid 1px #cccccc;"> <tr> <td style="width: 170px;" class="tdborder"> <span class="ziti">项目1</span> </td> <td style="width: 90px;" class="tdborder"> <span class="ziti">项目2</span> </td> <td style="width: 90px;" class="tdborder"> <span class="ziti">项目3</span> </td> <td style="width: 90px;" class="tdborder"> <span class="ziti">项目4</span> </td> <td style="width: 90px;" class="tdborder"> <span class="ziti">项目5</span> </td> <td style="width: 90px;" class="tdborder"> <span class="ziti">项目6</span> </td> <td style="width: 90px;" class="tdborder"> <span class="ziti">项目7</span> </td> <td style="width: 90px;" class="tdborder"> <span class="ziti">项目8</span> </td> <td style="width: 90px;" class="tdborder"> <span class="ziti">项目9</span> </td> <td style="width: 90px;" class="tdborder"> <span class="ziti">项目10</span> </td> <td style="width: 80px;" class="tdborder"> <span class="ziti">删除</span> </td> </tr> <asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <tr> <td class="tdborder"> <asp:TextBox ID="TextXm1" runat="server" Width="170"></asp:TextBox> </td> <td class="tdborder"> <asp:TextBox ID="TextXm2" runat="server" Width="90"></asp:TextBox> </td> <td class="tdborder"> <asp:TextBox ID="TextXm3" runat="server" Width="90"></asp:TextBox> </td> <td class="tdborder"> <asp:TextBox ID="TextXm4" runat="server" Width="90"></asp:TextBox> </td> <td class="tdborder"> <asp:TextBox ID="TextXm5" runat="server" Width="90"></asp:TextBox> </td> <td class="tdborder"> <asp:TextBox ID="TextXm6" runat="server" Width="90"></asp:TextBox> </td> <td class="tdborder"> <asp:TextBox ID="TextXm7" runat="server" Width="90"></asp:TextBox> </td> <td class="tdborder"> <asp:TextBox ID="TextXm8" runat="server" Width="90"></asp:TextBox> </td> <td class="tdborder"> <asp:TextBox ID="TextXm9" runat="server" Width="90"></asp:TextBox> </td> <td class="tdborder"> <asp:TextBox ID="TextXm10" runat="server" Width="90"></asp:TextBox> </td> <td style="width: 80px;" class="tdborder"> <asp:CheckBox ID="CheckDelete1" runat="server" /> </td> </tr> </ItemTemplate> </asp:Repeater> </table>后台: DataTable dt = new DataTable(); for (int i = 0; i < count; i++) //i是一个参数,表示增加几行 { dt.Rows.Add(); }Repeater1.DataSource = dt; Repeater1.DataBind();自己修改下相应代码 用JQuery也可以实现,你去下载个《锋利的jQuery》PDF看一下,马上能上手的。 我也想用JS做的 可是没怎么接触过JS 不知道代码怎么写 td.innerHTML="<input type='text' id='text1'/>"; 这个完全可以用Gridview+XML来做我这里的代码已经通过测试,你在修改一下吧!前台代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>无标题页</title></head><body> <form id="form1" runat="server"> <div> <asp:DropDownList ID="DropDownList3" runat="server"> </asp:DropDownList> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" /> <asp:HiddenField ID="HiddenField1" runat="server" Value="0" /> <asp:GridView ID="GridView1" runat="server"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem>并且</asp:ListItem> <asp:ListItem>或者</asp:ListItem> </asp:DropDownList> <asp:DropDownList ID="DropDownList2" runat="server"> <asp:ListItem>作者</asp:ListItem> <asp:ListItem>出版日期</asp:ListItem> </asp:DropDownList> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form></body></html>后台代码:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.Sql;using System.Xml;using System.IO;public partial class Default3 : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { BindXML(); } //绑定xml数据 private void BindXML() { if (!System.IO.File.Exists(Server.MapPath("XMLFile.xml"))) { Response.Write( "<script>alert('xml文件不存在,请先点击创建!')</script>"); return; } //方法一:通过ds 读取 xml DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("XMLFile.xml")); if(ds.Tables.Count > 0) { GridView1.DataSource = ds.Tables[0].DefaultView; GridView1.DataBind(); } // //方法二 // DataTable dt = new DataTable(); // DataColumn dc = new DataColumn("ID"); // dt.Columns.Add(dc); // String XmlFilePath = Server.MapPath("XMLFile.xml"); // FileStream fs = new FileStream(XmlFilePath, FileMode.Open, FileAccess.ReadWrite); // //将xml文件加载成xmlDoc // XmlDocument xmlDoc = new XmlDocument(); // xmlDoc.Load(fs); // //得到dbGust所有子节点 // XmlNodeList list = xmlDoc.GetElementsByTagName("user"); // foreach (System.Xml.XmlNode node in list) // { // DataRow dr = dt.NewRow(); // dr[0] = node.Attributes["ID"].Value; // dt.Rows.Add(dr); // } // GridView1.DataSource = dt; // GridView1.DataBind(); // fs.Close(); } //添加行 protected void Button1_Click(object sender, EventArgs e) { HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Server.MapPath("XMLFile.xml")); XmlNode xmldocSelect = xmlDoc.SelectSingleNode("Users"); XmlElement el = xmlDoc.CreateElement("user"); //添加user节点 el.SetAttribute("ID", HiddenField1.Value); xmldocSelect.AppendChild(el); xmlDoc.Save(Server.MapPath("XMLFile.xml")); BindXML(); } //删除 protected void Button2_Click(object sender, EventArgs e) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Server.MapPath("XMLFile.xml")); XmlNodeList xnl = xmlDoc.SelectSingleNode("Users").ChildNodes; try { foreach (XmlNode xn in xnl) { XmlElement xe = (XmlElement)xn; if (xe.GetAttribute("ID") == HiddenField1.Value) { //xe.RemoveAttribute("name");//删除name属性 //xe.RemoveAll();//删除该节点的全部内容 xn.ParentNode.RemoveChild(xn); break; } } xmlDoc.Save(Server.MapPath("XMLFile.xml"));//保存 HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) - 1).ToString(); BindXML(); } catch (Exception ex) { Response.Write("<script>alert('操作失误,原因:"+ex.Message+"')</script>"); return; } }}XML文件<?xml version="1.0" encoding="utf-8"?><Users></Users> 为什么我按上面的代码运行时,按Button键都不会增减控件呢XML文件里要写什么呢? 动态生成和删除,其实早年前就有好多人提起过,你可以百度一下或者谷歌一下,感觉答案非常的多,如果自己做,还是老实用JavaScript吧,最好不要用Jquery,从零开始学起,保证足够的知识。 我没学过JS,所以想问能不能给个JS代码参考 Jquery封装的很好了,不用白不用啊Jquery实现不了的在去用javascript写 就用现成的Jquery吧!方便,可靠性也强最近调试代码都快crazy了, 如何关闭窗口后结束Session,并执行其他服务器端操作 调试错误 ueditor赋值 【急ActiveReports】原来用vs2003ActiveReports正常,换vs2008后添加新项中没有ActiveReports这一项? 请帮我看看这句话,如果我要加上时间限制该如何加 新手问一个初级问题 关于在2003下发布和在XP下发布的区别问题 treeview如何加上滚动条? VS2005是不是倒退了??? 斑竹或者高手们,能帮小弟这个新手解决这个燃眉之急吗?!万分感激!!! 网站发布到服务器上后访问提示数据库是只读的是怎么回事? gridview列宽设置
点击button1,在button的事件里面对repeater进行绑定,动态生成
点击button2也是一样,重新绑定repeater,达到删除的目的
jqgrid.
或者用viewstate,感觉对客户不友好
var tr = table.insertRow();//增加行
var td=tr.insertCell();//增加列
table.deleteRow(....);//删除行
前台<table cellpadding="0" cellspacing="0" style="font-size: 12px; text-align: center;
border: solid 1px #cccccc;">
<tr>
<td style="width: 170px;" class="tdborder">
<span class="ziti">项目1</span>
</td>
<td style="width: 90px;" class="tdborder">
<span class="ziti">项目2</span>
</td>
<td style="width: 90px;" class="tdborder">
<span class="ziti">项目3</span>
</td>
<td style="width: 90px;" class="tdborder">
<span class="ziti">项目4</span>
</td>
<td style="width: 90px;" class="tdborder">
<span class="ziti">项目5</span>
</td>
<td style="width: 90px;" class="tdborder">
<span class="ziti">项目6</span>
</td>
<td style="width: 90px;" class="tdborder">
<span class="ziti">项目7</span>
</td>
<td style="width: 90px;" class="tdborder">
<span class="ziti">项目8</span>
</td>
<td style="width: 90px;" class="tdborder">
<span class="ziti">项目9</span>
</td>
<td style="width: 90px;" class="tdborder">
<span class="ziti">项目10</span>
</td>
<td style="width: 80px;" class="tdborder">
<span class="ziti">删除</span>
</td>
</tr>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td class="tdborder">
<asp:TextBox ID="TextXm1" runat="server" Width="170"></asp:TextBox>
</td>
<td class="tdborder">
<asp:TextBox ID="TextXm2" runat="server" Width="90"></asp:TextBox>
</td>
<td class="tdborder">
<asp:TextBox ID="TextXm3" runat="server" Width="90"></asp:TextBox>
</td>
<td class="tdborder">
<asp:TextBox ID="TextXm4" runat="server" Width="90"></asp:TextBox>
</td>
<td class="tdborder">
<asp:TextBox ID="TextXm5" runat="server" Width="90"></asp:TextBox>
</td>
<td class="tdborder">
<asp:TextBox ID="TextXm6" runat="server" Width="90"></asp:TextBox>
</td>
<td class="tdborder">
<asp:TextBox ID="TextXm7" runat="server" Width="90"></asp:TextBox>
</td>
<td class="tdborder">
<asp:TextBox ID="TextXm8" runat="server" Width="90"></asp:TextBox>
</td>
<td class="tdborder">
<asp:TextBox ID="TextXm9" runat="server" Width="90"></asp:TextBox>
</td>
<td class="tdborder">
<asp:TextBox ID="TextXm10" runat="server" Width="90"></asp:TextBox>
</td>
<td style="width: 80px;" class="tdborder">
<asp:CheckBox ID="CheckDelete1" runat="server" />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>后台: DataTable dt = new DataTable();
for (int i = 0; i < count; i++) //i是一个参数,表示增加几行
{
dt.Rows.Add();
}
Repeater1.DataSource = dt;
Repeater1.DataBind();自己修改下相应代码
我这里的代码已经通过测试,你在修改一下吧!
前台代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropDownList3" runat="server">
</asp:DropDownList>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" /> <asp:HiddenField ID="HiddenField1" runat="server" Value="0" />
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>并且</asp:ListItem>
<asp:ListItem>或者</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server">
<asp:ListItem>作者</asp:ListItem>
<asp:ListItem>出版日期</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
后台代码:using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.Sql;
using System.Xml;
using System.IO;public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
BindXML();
} //绑定xml数据
private void BindXML()
{
if (!System.IO.File.Exists(Server.MapPath("XMLFile.xml")))
{
Response.Write( "<script>alert('xml文件不存在,请先点击创建!')</script>");
return;
}
//方法一:通过ds 读取 xml
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("XMLFile.xml"));
if(ds.Tables.Count > 0)
{
GridView1.DataSource = ds.Tables[0].DefaultView;
GridView1.DataBind();
}
// //方法二
// DataTable dt = new DataTable();
// DataColumn dc = new DataColumn("ID");
// dt.Columns.Add(dc);
// String XmlFilePath = Server.MapPath("XMLFile.xml");
// FileStream fs = new FileStream(XmlFilePath, FileMode.Open, FileAccess.ReadWrite); // //将xml文件加载成xmlDoc
// XmlDocument xmlDoc = new XmlDocument();
// xmlDoc.Load(fs); // //得到dbGust所有子节点
// XmlNodeList list = xmlDoc.GetElementsByTagName("user"); // foreach (System.Xml.XmlNode node in list)
// {
// DataRow dr = dt.NewRow(); // dr[0] = node.Attributes["ID"].Value; // dt.Rows.Add(dr);
// }
// GridView1.DataSource = dt;
// GridView1.DataBind();
// fs.Close();
}
//添加行
protected void Button1_Click(object sender, EventArgs e)
{
HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("XMLFile.xml"));
XmlNode xmldocSelect = xmlDoc.SelectSingleNode("Users");
XmlElement el = xmlDoc.CreateElement("user"); //添加user节点
el.SetAttribute("ID", HiddenField1.Value);
xmldocSelect.AppendChild(el);
xmlDoc.Save(Server.MapPath("XMLFile.xml"));
BindXML(); }
//删除
protected void Button2_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("XMLFile.xml"));
XmlNodeList xnl = xmlDoc.SelectSingleNode("Users").ChildNodes;
try
{
foreach (XmlNode xn in xnl)
{
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("ID") == HiddenField1.Value)
{
//xe.RemoveAttribute("name");//删除name属性
//xe.RemoveAll();//删除该节点的全部内容
xn.ParentNode.RemoveChild(xn);
break;
}
}
xmlDoc.Save(Server.MapPath("XMLFile.xml"));//保存
HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) - 1).ToString();
BindXML();
}
catch (Exception ex)
{
Response.Write("<script>alert('操作失误,原因:"+ex.Message+"')</script>");
return;
}
}
}XML文件<?xml version="1.0" encoding="utf-8"?>
<Users>
</Users>
XML文件里要写什么呢?
最近调试代码都快crazy了,