日期:2014-05-17  浏览次数:20403 次

每点击“+”一次,Gridview就自动添加一行,并能保存原有的数据 (40)
在Page_Load中,先生成一个datatable,然后与gridview绑定。
                    DataTable stoveTable = new DataTable();
                    stoveTable.Columns.Add("usage", typeof(DropDownList));
                    stoveTable.Columns.Add("steelKind", typeof(DropDownList));
                    stoveTable.Columns.Add("castingTon", typeof(TextBox));

                    DataRow newRow = stoveTable.NewRow();
                   
                    stoveTable.Rows.Add(newRow); 
      

                    this.GridView_list.DataSource = stoveTable;
                    this.GridView_list.DataBind();
如图:


目标:每点击“+”一次,就自动添加一行,而且如果前面各行的Dropdownlist中的数据已改变,或者textbox中已输入数据,则要求能保留住这些数据,解决方法:
(1)把数据读到datatable中,用viewstate记录状态,问题:Dropdownlist中的数据已改变或者textbox中已输入数据后,如何更新到viewstate中??
add_Click(object sender, EventArgs e)
{
DataTable newTable =this.ViewState["stoveTable"] as DataTable;


                DataRow newRow = newTable.NewRow();
                newTable.Rows.Add(newRow);

this.GridView_list.DataSource = newTable;
                this.GridView_list.DataBind();

                this.ViewState["stoveTable"] = newTable;
}
这样写能实现添加新的一行,可是,原有的行的数据也会一起被初始化。

------解决方案--------------------
下面是一个完整的例子,拷贝存储xx.aspx执行即可
<%@ Page Language="C#" EnableViewState="true" %>

<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  protected void Page_Load(object sender, EventArgs e)
  {
    if (!Page.IsPostBack)
    {
      DataTable stoveTable = new DataTable();
      stoveTable.Columns.Add("usage", typeof(String));
      stoveTable.Columns.Add("steelKind", typeof(String));
      stoveTable.Columns.Add("castingTon", typeof(String));
    &n