30 个解决方案
#1
动态添加删除 控件?
还要跟服务器有关系?
难道你要把界面上的控件信息都放在数据库中,然后用反射……
想想都觉得麻烦~~~
还要跟服务器有关系?
难道你要把界面上的控件信息都放在数据库中,然后用反射……
想想都觉得麻烦~~~
#2
可以做,但是我还是建议你把控件隐藏更好
其中的麻烦你会懂的~~
其中的麻烦你会懂的~~
#3
我现在想的是动态添加table行及控件,输入数据后通过按钮事件提交给服务器
#4
完全可以进行 以前做过批量上传 你可以用ArrayList創建動態增加數組来实现。
#5
有没有例子参考下
#6
那就简单了~~
asp.net VB.net有控件数组,c#没有,所以稍微有点难度
但至少可以不用反射~~
C#的winform中
先创建,然后增加
如:
System.Windows.Forms.TextBox XX = new System.Windows.Forms.TextBox();
this.Controls.Add(XX);
不知道你用的是那个控件,就给你一个例子好了
#7
<div>
<input type="button" id="btn_addtr" value="增行" />
<table id="dynamicTable" width="700" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="30" align="center" bgcolor="#CCCCCC">
ID</td>
<td align="center" bgcolor="#CCCCCC">
Username</td>
<td align="center" bgcolor="#CCCCCC">
Usertype</td>
<td align="center" bgcolor="#CCCCCC">
Other</td>
<td>
</td>
</tr>
<tr>
<td height="30" align="center">
<input type="text" size="2" value="1" /></td>
<td align="center">
<input type="text" name="username" /></td>
<td align="center">
<select name="type">
<option value="1">Administrator</option>
<option value="2">Guest</option>
</select>
</td>
<td align="center">
<input type="text" name="username2" /></td>
<td>
<input type="button" id="btn_deltr" onclick="deltr()" value="删行" /></td>
</tr>
</table>
</div>
<script type="text/javascript">
$(function () {
var show_count = 20; //要显示的条数
var count = $("input:text").val(); //递增的开始值,这里是你的ID
var fin_count = parseInt(count) + (show_count - 1); //结束递增的条件
$("#btn_addtr").click(function () {
if (count < fin_count) //点击时候,如果当前的数字小于递增结束的条件
{
$("tr:eq(1)").clone().appendTo("table"); //在表格后面添加一行
$("tr:last td input:first").val(++count); //改变添加的行的ID值。
}
});
});
function deltr() {
var length = $("tr").length;
if (length <= 2) {
alert("至少保留一行");
} else {
$("tr:last").remove();
}
}
</script>
你用这个好了 js方式的
#8
这里提示 “Microsoft JScript 运行时错误: 缺少对象”
$(function () {
var show_count = 20; //要显示的条数
var count = $("input:text").val(); //递增的开始值,这里是你的ID
var fin_count = parseInt(count) + (show_count - 1); //结束递增的条件
$("#btn_addtr").click(function () {
if (count < fin_count) //点击时候,如果当前的数字小于递增结束的条件
{
$("tr:eq(1)").clone().appendTo("table"); //在表格后面添加一行
$("tr:last td input:first").val(++count); //改变添加的行的ID值。
}
});
});
function deltr() {
var length = $("tr").length;
if (length <= 2) {
alert("至少保留一行");
} else {
$("tr:last").remove();
}
}
#9
现在添加行和控件比较容易,关键是要获取控件的值
#10
顶起来,不能沉了
#11
服务器控件:数据的状态很重要,要多调试
HTML控件,用JQ是比较常用的,可能做成异步提交吧
HTML控件,用JQ是比较常用的,可能做成异步提交吧
#12
我是在客户端用jquery动态加.然后用jquery的选择器来选择到一个集合来处理的.
#13
http://wenku.baidu.com/view/0ce0ecc758f5f61fb736660f.html
这个也许对你有用.原理差不多
这个也许对你有用.原理差不多
#14
我是在后台动态生成,每个控件都有唯一ID,然后遍历FindControl
#15
贴代码看看
#16
动态添加
protected void Page_Load(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt;
LiteralControl litc;
for (int i = 0; i < index; i++)
{
txt = new TextBox();
txt.ID = string.Format("txt{0}", i);
txt.Text = (i + 1).ToString();
ph.Controls.Add(txt);
litc = new LiteralControl("<br />");
ph.Controls.Add(litc);
}
}
protected void lbtnAdd_Click(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt = new TextBox();
txt.ID = string.Format("txt{0}", index);
txt.Text = (index + 1).ToString();
ph.Controls.Add(txt);
ViewState["count"] = index + 1;
}
protected void Page_Load(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt;
LiteralControl litc;
for (int i = 0; i < index; i++)
{
txt = new TextBox();
txt.ID = string.Format("txt{0}", i);
txt.Text = (i + 1).ToString();
ph.Controls.Add(txt);
litc = new LiteralControl("<br />");
ph.Controls.Add(litc);
}
}
protected void lbtnAdd_Click(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt = new TextBox();
txt.ID = string.Format("txt{0}", index);
txt.Text = (index + 1).ToString();
ph.Controls.Add(txt);
ViewState["count"] = index + 1;
}
#17
ph是什么控件?
#18
placeHolder
#19
我改了,但是没有效果
#20
不知道你绑定数据源用的什么控件 我这有gridview 仅供参考 不知道有没有用
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBind();//加载数据
}
}
private void DataBind()
{
List<MODEL.Test> list = new List<MODEL.Test>();//获取数据源 new这是刚写后台没有数据
this.GridView1.DataSource = list;
ViewState["list"] = list;//保存数据源
this.GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
List<MODEL.Test> list = ViewState["list"] as List<MODEL.Test>;//获取保存的数据源
for (int i = 0; i < list.Count; i++)
{
list[i].test = ((TextBox)this.GridView1.Rows[i].Cells[2].FindControl("TextBox1")).Text;//先将页面中的数据保存在 list 中
}
list.Add(new MODEL.Test());//创建新的行
this.GridView1.DataSource = list;
this.GridView1.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBind();//加载数据
}
}
private void DataBind()
{
List<MODEL.Test> list = new List<MODEL.Test>();//获取数据源 new这是刚写后台没有数据
this.GridView1.DataSource = list;
ViewState["list"] = list;//保存数据源
this.GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
List<MODEL.Test> list = ViewState["list"] as List<MODEL.Test>;//获取保存的数据源
for (int i = 0; i < list.Count; i++)
{
list[i].test = ((TextBox)this.GridView1.Rows[i].Cells[2].FindControl("TextBox1")).Text;//先将页面中的数据保存在 list 中
}
list.Add(new MODEL.Test());//创建新的行
this.GridView1.DataSource = list;
this.GridView1.DataBind();
}
#21
我现在做是只是添加行和控件,然后把控件的值存入服务器,不需要绑定数据
#22
那你就用placeholder
效果就是将创建的控件 添加到placeholder 上面你说没效果 那你打断点调试了
#24
我做过类似的。
以前的思路就是给Gridview添加行。
后台是用一个DataTable 和易个viewstate搭配的。。
还有遍历Gridview 取行数。。
说下思路吧 去年做的
添加的时候
在DataTable 里动态添加一行 然后绑定GridView.
删除的时候
也是在DataTable 里删除某行 然后绑定GridView
两种操作都要把DataTable的状态保存到ViewState.
插入的数据库的时候也是要遍历GridView 里 然后插入到数据库
但是做的时候效率比较慢 但是可以保证功能完成。。
看你晚上能不能做上 做不上的时候 晚上回去给你找找DEMO
以前的思路就是给Gridview添加行。
后台是用一个DataTable 和易个viewstate搭配的。。
还有遍历Gridview 取行数。。
说下思路吧 去年做的
添加的时候
在DataTable 里动态添加一行 然后绑定GridView.
删除的时候
也是在DataTable 里删除某行 然后绑定GridView
两种操作都要把DataTable的状态保存到ViewState.
插入的数据库的时候也是要遍历GridView 里 然后插入到数据库
但是做的时候效率比较慢 但是可以保证功能完成。。
看你晚上能不能做上 做不上的时候 晚上回去给你找找DEMO
#25
多字段多组合查询时做过类似的控件,
#26
#27
#28
你好,能不能后台代码也贴一下,或者解释下
#29
不好意思,昨天中午去火车站买票了
#30
嗯,看到了,呵呵,问题解决,多谢,又学到了!
#1
动态添加删除 控件?
还要跟服务器有关系?
难道你要把界面上的控件信息都放在数据库中,然后用反射……
想想都觉得麻烦~~~
还要跟服务器有关系?
难道你要把界面上的控件信息都放在数据库中,然后用反射……
想想都觉得麻烦~~~
#2
可以做,但是我还是建议你把控件隐藏更好
其中的麻烦你会懂的~~
其中的麻烦你会懂的~~
#3
我现在想的是动态添加table行及控件,输入数据后通过按钮事件提交给服务器
#4
完全可以进行 以前做过批量上传 你可以用ArrayList創建動態增加數組来实现。
#5
有没有例子参考下
#6
那就简单了~~
asp.net VB.net有控件数组,c#没有,所以稍微有点难度
但至少可以不用反射~~
C#的winform中
先创建,然后增加
如:
System.Windows.Forms.TextBox XX = new System.Windows.Forms.TextBox();
this.Controls.Add(XX);
不知道你用的是那个控件,就给你一个例子好了
#7
<div>
<input type="button" id="btn_addtr" value="增行" />
<table id="dynamicTable" width="700" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="30" align="center" bgcolor="#CCCCCC">
ID</td>
<td align="center" bgcolor="#CCCCCC">
Username</td>
<td align="center" bgcolor="#CCCCCC">
Usertype</td>
<td align="center" bgcolor="#CCCCCC">
Other</td>
<td>
</td>
</tr>
<tr>
<td height="30" align="center">
<input type="text" size="2" value="1" /></td>
<td align="center">
<input type="text" name="username" /></td>
<td align="center">
<select name="type">
<option value="1">Administrator</option>
<option value="2">Guest</option>
</select>
</td>
<td align="center">
<input type="text" name="username2" /></td>
<td>
<input type="button" id="btn_deltr" onclick="deltr()" value="删行" /></td>
</tr>
</table>
</div>
<script type="text/javascript">
$(function () {
var show_count = 20; //要显示的条数
var count = $("input:text").val(); //递增的开始值,这里是你的ID
var fin_count = parseInt(count) + (show_count - 1); //结束递增的条件
$("#btn_addtr").click(function () {
if (count < fin_count) //点击时候,如果当前的数字小于递增结束的条件
{
$("tr:eq(1)").clone().appendTo("table"); //在表格后面添加一行
$("tr:last td input:first").val(++count); //改变添加的行的ID值。
}
});
});
function deltr() {
var length = $("tr").length;
if (length <= 2) {
alert("至少保留一行");
} else {
$("tr:last").remove();
}
}
</script>
你用这个好了 js方式的
#8
这里提示 “Microsoft JScript 运行时错误: 缺少对象”
$(function () {
var show_count = 20; //要显示的条数
var count = $("input:text").val(); //递增的开始值,这里是你的ID
var fin_count = parseInt(count) + (show_count - 1); //结束递增的条件
$("#btn_addtr").click(function () {
if (count < fin_count) //点击时候,如果当前的数字小于递增结束的条件
{
$("tr:eq(1)").clone().appendTo("table"); //在表格后面添加一行
$("tr:last td input:first").val(++count); //改变添加的行的ID值。
}
});
});
function deltr() {
var length = $("tr").length;
if (length <= 2) {
alert("至少保留一行");
} else {
$("tr:last").remove();
}
}
#9
现在添加行和控件比较容易,关键是要获取控件的值
#10
顶起来,不能沉了
#11
服务器控件:数据的状态很重要,要多调试
HTML控件,用JQ是比较常用的,可能做成异步提交吧
HTML控件,用JQ是比较常用的,可能做成异步提交吧
#12
我是在客户端用jquery动态加.然后用jquery的选择器来选择到一个集合来处理的.
#13
http://wenku.baidu.com/view/0ce0ecc758f5f61fb736660f.html
这个也许对你有用.原理差不多
这个也许对你有用.原理差不多
#14
我是在后台动态生成,每个控件都有唯一ID,然后遍历FindControl
#15
贴代码看看
#16
动态添加
protected void Page_Load(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt;
LiteralControl litc;
for (int i = 0; i < index; i++)
{
txt = new TextBox();
txt.ID = string.Format("txt{0}", i);
txt.Text = (i + 1).ToString();
ph.Controls.Add(txt);
litc = new LiteralControl("<br />");
ph.Controls.Add(litc);
}
}
protected void lbtnAdd_Click(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt = new TextBox();
txt.ID = string.Format("txt{0}", index);
txt.Text = (index + 1).ToString();
ph.Controls.Add(txt);
ViewState["count"] = index + 1;
}
protected void Page_Load(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt;
LiteralControl litc;
for (int i = 0; i < index; i++)
{
txt = new TextBox();
txt.ID = string.Format("txt{0}", i);
txt.Text = (i + 1).ToString();
ph.Controls.Add(txt);
litc = new LiteralControl("<br />");
ph.Controls.Add(litc);
}
}
protected void lbtnAdd_Click(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt = new TextBox();
txt.ID = string.Format("txt{0}", index);
txt.Text = (index + 1).ToString();
ph.Controls.Add(txt);
ViewState["count"] = index + 1;
}
#17
ph是什么控件?
#18
placeHolder
#19
我改了,但是没有效果
#20
不知道你绑定数据源用的什么控件 我这有gridview 仅供参考 不知道有没有用
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBind();//加载数据
}
}
private void DataBind()
{
List<MODEL.Test> list = new List<MODEL.Test>();//获取数据源 new这是刚写后台没有数据
this.GridView1.DataSource = list;
ViewState["list"] = list;//保存数据源
this.GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
List<MODEL.Test> list = ViewState["list"] as List<MODEL.Test>;//获取保存的数据源
for (int i = 0; i < list.Count; i++)
{
list[i].test = ((TextBox)this.GridView1.Rows[i].Cells[2].FindControl("TextBox1")).Text;//先将页面中的数据保存在 list 中
}
list.Add(new MODEL.Test());//创建新的行
this.GridView1.DataSource = list;
this.GridView1.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBind();//加载数据
}
}
private void DataBind()
{
List<MODEL.Test> list = new List<MODEL.Test>();//获取数据源 new这是刚写后台没有数据
this.GridView1.DataSource = list;
ViewState["list"] = list;//保存数据源
this.GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
List<MODEL.Test> list = ViewState["list"] as List<MODEL.Test>;//获取保存的数据源
for (int i = 0; i < list.Count; i++)
{
list[i].test = ((TextBox)this.GridView1.Rows[i].Cells[2].FindControl("TextBox1")).Text;//先将页面中的数据保存在 list 中
}
list.Add(new MODEL.Test());//创建新的行
this.GridView1.DataSource = list;
this.GridView1.DataBind();
}
#21
我现在做是只是添加行和控件,然后把控件的值存入服务器,不需要绑定数据
#22
那你就用placeholder
效果就是将创建的控件 添加到placeholder 上面你说没效果 那你打断点调试了
#23
#24
我做过类似的。
以前的思路就是给Gridview添加行。
后台是用一个DataTable 和易个viewstate搭配的。。
还有遍历Gridview 取行数。。
说下思路吧 去年做的
添加的时候
在DataTable 里动态添加一行 然后绑定GridView.
删除的时候
也是在DataTable 里删除某行 然后绑定GridView
两种操作都要把DataTable的状态保存到ViewState.
插入的数据库的时候也是要遍历GridView 里 然后插入到数据库
但是做的时候效率比较慢 但是可以保证功能完成。。
看你晚上能不能做上 做不上的时候 晚上回去给你找找DEMO
以前的思路就是给Gridview添加行。
后台是用一个DataTable 和易个viewstate搭配的。。
还有遍历Gridview 取行数。。
说下思路吧 去年做的
添加的时候
在DataTable 里动态添加一行 然后绑定GridView.
删除的时候
也是在DataTable 里删除某行 然后绑定GridView
两种操作都要把DataTable的状态保存到ViewState.
插入的数据库的时候也是要遍历GridView 里 然后插入到数据库
但是做的时候效率比较慢 但是可以保证功能完成。。
看你晚上能不能做上 做不上的时候 晚上回去给你找找DEMO
#25
多字段多组合查询时做过类似的控件,
#26
#27
#28
你好,能不能后台代码也贴一下,或者解释下
#29
不好意思,昨天中午去火车站买票了
#30
嗯,看到了,呵呵,问题解决,多谢,又学到了!