动态添加删除行及控件,并提交给服务器

时间:2022-09-17 20:33:47
我现在做一个添加页面 动态添加删除行及控件,并提交给服务器可以动态添加行及控件的

30 个解决方案

#1


动态添加删除 控件?
还要跟服务器有关系?

难道你要把界面上的控件信息都放在数据库中,然后用反射……
想想都觉得麻烦~~~

#2


可以做,但是我还是建议你把控件隐藏更好
其中的麻烦你会懂的~~

#3


引用 2 楼 ybh37 的回复:
可以做,但是我还是建议你把控件隐藏更好
其中的麻烦你会懂的~~
我现在想的是动态添加table行及控件,输入数据后通过按钮事件提交给服务器

#4


完全可以进行 以前做过批量上传 你可以用ArrayList創建動態增加數組来实现。

#5


引用 4 楼 fengqingtao2008 的回复:
完全可以进行 以前做过批量上传 你可以用ArrayList創建動態增加數組来实现。
有没有例子参考下 动态添加删除行及控件,并提交给服务器

#6


引用 3 楼 abcdef1111111 的回复:
引用 2 楼 ybh37 的回复:
可以做,但是我还是建议你把控件隐藏更好
其中的麻烦你会懂的~~
我现在想的是动态添加table行及控件,输入数据后通过按钮事件提交给服务器

那就简单了~~
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



 $(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();
        }
    }  

这里提示 “Microsoft JScript 运行时错误: 缺少对象”

#9


现在添加行和控件比较容易,关键是要获取控件的值

#10


顶起来,不能沉了

#11


服务器控件:数据的状态很重要,要多调试
HTML控件,用JQ是比较常用的,可能做成异步提交吧

#12


我是在客户端用jquery动态加.然后用jquery的选择器来选择到一个集合来处理的.

#13


http://wenku.baidu.com/view/0ce0ecc758f5f61fb736660f.html
这个也许对你有用.原理差不多

#14


我是在后台动态生成,每个控件都有唯一ID,然后遍历FindControl

#15


引用 14 楼 starfd 的回复:
我是在后台动态生成,每个控件都有唯一ID,然后遍历FindControl
贴代码看看

#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;
    }

#17


引用 16 楼 wuyq11 的回复:
动态添加
protected void Page_Load(object sender, EventArgs e)
  {
  object count = ViewState["count"] ?? "0";
  int index;
  int.TryParse(count.ToString(), out index);
  TextBox txt;
  LiteralContr……
ph是什么控件?

#18


引用 17 楼 abcdef1111111 的回复:
引用 16 楼 wuyq11 的回复:
动态添加
protected void Page_Load(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt;
Lit……

placeHolder

#19


引用 18 楼 new_fengzi 的回复:
引用 17 楼 abcdef1111111 的回复:
引用 16 楼 wuyq11 的回复:
动态添加
protected void Page_Load(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), ou……
我改了,但是没有效果

#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();
    }

#21


引用 20 楼 new_fengzi 的回复:
不知道你绑定数据源用的什么控件 我这有gridview 仅供参考 不知道有没有用 

  protected void Page_Load(object sender, EventArgs e)
  {
  if (!IsPostBack)
  {
  DataBind();//加载数据
  }
  }
  private void DataBind()
  {
  List……
我现在做是只是添加行和控件,然后把控件的值存入服务器,不需要绑定数据

#22


引用 21 楼 abcdef1111111 的回复:
引用 20 楼 new_fengzi 的回复:
不知道你绑定数据源用的什么控件 我这有gridview 仅供参考 不知道有没有用

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBind();//加载数据
}
}
private void DataBind()
{
……

那你就用placeholder 
效果就是将创建的控件 添加到placeholder 上面你说没效果 那你打断点调试了

#24


我做过类似的。

以前的思路就是给Gridview添加行。

后台是用一个DataTable 和易个viewstate搭配的。。

还有遍历Gridview 取行数。。

说下思路吧 去年做的


添加的时候
在DataTable 里动态添加一行 然后绑定GridView.

删除的时候
也是在DataTable 里删除某行  然后绑定GridView 

两种操作都要把DataTable的状态保存到ViewState.

插入的数据库的时候也是要遍历GridView 里 然后插入到数据库

但是做的时候效率比较慢 但是可以保证功能完成。。

看你晚上能不能做上 做不上的时候 晚上回去给你找找DEMO

#25


多字段多组合查询时做过类似的控件,

#26


该回复于2011-01-21 14:25:53被版主删除

#27


该回复于2011-01-21 15:33:52被版主删除

#28


引用 23 楼 telankes2000 的回复:
GridView动态增加行
你好,能不能后台代码也贴一下,或者解释下

#29


引用 24 楼 wxr0323 的回复:
我做过类似的。

以前的思路就是给Gridview添加行。

后台是用一个DataTable 和易个viewstate搭配的。。

还有遍历Gridview 取行数。。

说下思路吧 去年做的


添加的时候
在DataTable 里动态添加一行 然后绑定GridView.

删除的时候
也是在DataTable 里删除某行 然后绑定GridView 

两种操作……
不好意思,昨天中午去火车站买票了

#30


引用 28 楼 abcdef1111111 的回复:
引用 23 楼 telankes2000 的回复:
GridView动态增加行
你好,能不能后台代码也贴一下,或者解释下
嗯,看到了,呵呵,问题解决,多谢,又学到了!

#1


动态添加删除 控件?
还要跟服务器有关系?

难道你要把界面上的控件信息都放在数据库中,然后用反射……
想想都觉得麻烦~~~

#2


可以做,但是我还是建议你把控件隐藏更好
其中的麻烦你会懂的~~

#3


引用 2 楼 ybh37 的回复:
可以做,但是我还是建议你把控件隐藏更好
其中的麻烦你会懂的~~
我现在想的是动态添加table行及控件,输入数据后通过按钮事件提交给服务器

#4


完全可以进行 以前做过批量上传 你可以用ArrayList創建動態增加數組来实现。

#5


引用 4 楼 fengqingtao2008 的回复:
完全可以进行 以前做过批量上传 你可以用ArrayList創建動態增加數組来实现。
有没有例子参考下 动态添加删除行及控件,并提交给服务器

#6


引用 3 楼 abcdef1111111 的回复:
引用 2 楼 ybh37 的回复:
可以做,但是我还是建议你把控件隐藏更好
其中的麻烦你会懂的~~
我现在想的是动态添加table行及控件,输入数据后通过按钮事件提交给服务器

那就简单了~~
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



 $(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();
        }
    }  

这里提示 “Microsoft JScript 运行时错误: 缺少对象”

#9


现在添加行和控件比较容易,关键是要获取控件的值

#10


顶起来,不能沉了

#11


服务器控件:数据的状态很重要,要多调试
HTML控件,用JQ是比较常用的,可能做成异步提交吧

#12


我是在客户端用jquery动态加.然后用jquery的选择器来选择到一个集合来处理的.

#13


http://wenku.baidu.com/view/0ce0ecc758f5f61fb736660f.html
这个也许对你有用.原理差不多

#14


我是在后台动态生成,每个控件都有唯一ID,然后遍历FindControl

#15


引用 14 楼 starfd 的回复:
我是在后台动态生成,每个控件都有唯一ID,然后遍历FindControl
贴代码看看

#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;
    }

#17


引用 16 楼 wuyq11 的回复:
动态添加
protected void Page_Load(object sender, EventArgs e)
  {
  object count = ViewState["count"] ?? "0";
  int index;
  int.TryParse(count.ToString(), out index);
  TextBox txt;
  LiteralContr……
ph是什么控件?

#18


引用 17 楼 abcdef1111111 的回复:
引用 16 楼 wuyq11 的回复:
动态添加
protected void Page_Load(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), out index);
TextBox txt;
Lit……

placeHolder

#19


引用 18 楼 new_fengzi 的回复:
引用 17 楼 abcdef1111111 的回复:
引用 16 楼 wuyq11 的回复:
动态添加
protected void Page_Load(object sender, EventArgs e)
{
object count = ViewState["count"] ?? "0";
int index;
int.TryParse(count.ToString(), ou……
我改了,但是没有效果

#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();
    }

#21


引用 20 楼 new_fengzi 的回复:
不知道你绑定数据源用的什么控件 我这有gridview 仅供参考 不知道有没有用 

  protected void Page_Load(object sender, EventArgs e)
  {
  if (!IsPostBack)
  {
  DataBind();//加载数据
  }
  }
  private void DataBind()
  {
  List……
我现在做是只是添加行和控件,然后把控件的值存入服务器,不需要绑定数据

#22


引用 21 楼 abcdef1111111 的回复:
引用 20 楼 new_fengzi 的回复:
不知道你绑定数据源用的什么控件 我这有gridview 仅供参考 不知道有没有用

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBind();//加载数据
}
}
private void DataBind()
{
……

那你就用placeholder 
效果就是将创建的控件 添加到placeholder 上面你说没效果 那你打断点调试了

#23


#24


我做过类似的。

以前的思路就是给Gridview添加行。

后台是用一个DataTable 和易个viewstate搭配的。。

还有遍历Gridview 取行数。。

说下思路吧 去年做的


添加的时候
在DataTable 里动态添加一行 然后绑定GridView.

删除的时候
也是在DataTable 里删除某行  然后绑定GridView 

两种操作都要把DataTable的状态保存到ViewState.

插入的数据库的时候也是要遍历GridView 里 然后插入到数据库

但是做的时候效率比较慢 但是可以保证功能完成。。

看你晚上能不能做上 做不上的时候 晚上回去给你找找DEMO

#25


多字段多组合查询时做过类似的控件,

#26


该回复于2011-01-21 14:25:53被版主删除

#27


该回复于2011-01-21 15:33:52被版主删除

#28


引用 23 楼 telankes2000 的回复:
GridView动态增加行
你好,能不能后台代码也贴一下,或者解释下

#29


引用 24 楼 wxr0323 的回复:
我做过类似的。

以前的思路就是给Gridview添加行。

后台是用一个DataTable 和易个viewstate搭配的。。

还有遍历Gridview 取行数。。

说下思路吧 去年做的


添加的时候
在DataTable 里动态添加一行 然后绑定GridView.

删除的时候
也是在DataTable 里删除某行 然后绑定GridView 

两种操作……
不好意思,昨天中午去火车站买票了

#30


引用 28 楼 abcdef1111111 的回复:
引用 23 楼 telankes2000 的回复:
GridView动态增加行
你好,能不能后台代码也贴一下,或者解释下
嗯,看到了,呵呵,问题解决,多谢,又学到了!