首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

每点击“+”一次,Gridview就自动平添一行,并能保存原有的数据 (40)

2013-04-20 
每点击“+”一次,Gridview就自动添加一行,并能保存原有的数据 (40)在Page_Load中,先生成一个datatable,然后

每点击“+”一次,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();
如图:
每点击“+”一次,Gridview就自动平添一行,并能保存原有的数据 (40)

目标:每点击“+”一次,就自动添加一行,而且如果前面各行的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));
      DataRow newRow = stoveTable.NewRow();
      stoveTable.Rows.Add(newRow);


      this.GridView_list.DataSource = stoveTable;
      this.GridView_list.DataBind();
      ViewState["dt"] = stoveTable;
    }
  }


  protected void GridView_list_RowDataBound(object sender, GridViewRowEventArgs e)
  {
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
      String usage = DataBinder.Eval(e.Row.DataItem, "usage").ToString();
      String steelKind = DataBinder.Eval(e.Row.DataItem, "steelKind").ToString();
      String castingTon = DataBinder.Eval(e.Row.DataItem, "castingTon").ToString();
      DropDownList x1 = e.Row.FindControl("x1") as DropDownList;
      DropDownList x2 = e.Row.FindControl("x2") as DropDownList;
      TextBox x3 = e.Row.FindControl("x3") as TextBox;
      x3.Text = castingTon;

      ListItem xx1 = x1.Items.FindByValue(usage);
      if (xx1 != null) xx1.Selected = true;

      ListItem xx2 = x2.Items.FindByValue(steelKind);
      if (xx2 != null) xx2.Selected = true;
    }
  }

  protected void LinkButton1_Click(object sender, EventArgs e)
  {
    GridViewRow r = GridView_list.Rows[GridView_list.Rows.Count - 1];
    DropDownList x1 = r.FindControl("x1") as DropDownList;
    DropDownList x2 = r.FindControl("x2") as DropDownList;
    TextBox x3 = r.FindControl("x3") as TextBox;
    if (ViewState["dt"] == null)
    {
      Response.Write("Error");
      return;
    }
    DataRow newRow;
    DataTable stoveTable = (DataTable)ViewState["dt"];

    newRow = stoveTable.Rows[stoveTable.Rows.Count - 1];

    newRow["usage"] = x1.SelectedValue;
    newRow["steelKind"] = x2.SelectedValue;
    newRow["castingTon"] = x3.Text;
    //if (stoveTable.Rows.Count < 1) stoveTable.Rows.Add(newRow);

    newRow = stoveTable.NewRow();
    stoveTable.Rows.Add(newRow);
    ViewState["dt"] = stoveTable;
    this.GridView_list.DataSource = stoveTable;
    this.GridView_list.DataBind();

  }
  protected void LinkButton2_Click(object sender, EventArgs e)
  {
    if (ViewState["dt"] == null)
    {
      Response.Write("Error");
      return;
    }


    DataTable stoveTable = (DataTable)ViewState["dt"];
    if (stoveTable.Rows.Count < 2) return;
    stoveTable.Rows.RemoveAt(stoveTable.Rows.Count - 1);
    ViewState["dt"] = stoveTable;
    this.GridView_list.DataSource = stoveTable;
    this.GridView_list.DataBind();
  }

  protected void x1_SelectedIndexChanged(object sender, EventArgs e)
  {
    DropDownList x1 = sender as DropDownList;
    GridViewRow r = x1.Parent.Parent as GridViewRow;
    if (ViewState["dt"] == null)
    {
      Response.Write("Error");
      return;
    }
    DataTable stoveTable = (DataTable)ViewState["dt"];
    stoveTable.Rows[r.RowIndex]["usage"] = x1.SelectedValue;
    ViewState["dt"] = stoveTable;
    this.GridView_list.DataSource = stoveTable;
    this.GridView_list.DataBind();
  }

  protected void x2_SelectedIndexChanged(object sender, EventArgs e)
  {
    DropDownList x2 = sender as DropDownList;
    GridViewRow r = x2.Parent.Parent as GridViewRow;
    if (ViewState["dt"] == null)
    {
      Response.Write("Error");
      return;
    }
    DataTable stoveTable = (DataTable)ViewState["dt"];
    stoveTable.Rows[r.RowIndex]["steelKind"] = x2.SelectedValue;
    ViewState["dt"] = stoveTable;
    this.GridView_list.DataSource = stoveTable;
    this.GridView_list.DataBind();
  }

  protected void x3_TextChanged(object sender, EventArgs e)
  {

    TextBox x3 = sender as TextBox;
    GridViewRow r = x3.Parent.Parent as GridViewRow;
    if (ViewState["dt"] == null)
    {
      Response.Write("Error");
      return;
    }
    DataTable stoveTable = (DataTable)ViewState["dt"];
    stoveTable.Rows[r.RowIndex]["castingTon"] = x3.Text;
    ViewState["dt"] = stoveTable;
    this.GridView_list.DataSource = stoveTable;
    this.GridView_list.DataBind();
  }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server">
  <asp:GridView ID="GridView_list" runat="server" ShowFooter="false" AutoGenerateColumns="false"
    OnRowDataBound="GridView_list_RowDataBound">
    <Columns>


      <asp:TemplateField>
        <ItemTemplate>
          <asp:DropDownList ID="x1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="x1_SelectedIndexChanged">
            <asp:ListItem>L0</asp:ListItem>
            <asp:ListItem>L1</asp:ListItem>
            <asp:ListItem>L2</asp:ListItem>
            <asp:ListItem>L3</asp:ListItem>
          </asp:DropDownList>
        </ItemTemplate>
      </asp:TemplateField>
      <asp:TemplateField>
        <ItemTemplate>
          <asp:DropDownList ID="x2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="x2_SelectedIndexChanged">
            <asp:ListItem>10#</asp:ListItem>
            <asp:ListItem>20#</asp:ListItem>
            <asp:ListItem>30#</asp:ListItem>
            <asp:ListItem>40#</asp:ListItem>
          </asp:DropDownList>
        </ItemTemplate>
      </asp:TemplateField>
      <asp:TemplateField>
        <ItemTemplate>
          <asp:TextBox ID="x3" runat="server" AutoPostBack="true" OnTextChanged="x3_TextChanged"></asp:TextBox>
        </ItemTemplate>
      </asp:TemplateField>
    </Columns>
  </asp:GridView>
  <asp:LinkButton ID="LinkButton1" runat="server" Text="+" OnClick="LinkButton1_Click"></asp:LinkButton>
  <asp:LinkButton ID="LinkButton2" runat="server" Text="-" OnClick="LinkButton2_Click"></asp:LinkButton>
  </form>
</body>
</html>

热点排行