datagrid在page_load 里时候,实现有三行,每行的列里都显示文本框,单击button的时候增加新行?
就是说单击botton一下,变为四行,前三行输入的内容不丢失,再单击一下,变为五行,等等!??

解决方案 »

  1.   

    <%@ Page language="c#" Codebehind="DataGridMultiUse.aspx.cs" AutoEventWireup="false" Inherits="CommonFunction.DataGridMulUse" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>DataGridMulUse</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body bgColor="#66cc99" MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <h2>DataGrid控件综合举例:</h2>
    <TABLE id="Table1" style="WIDTH: 672px; HEIGHT: 265px" cellSpacing="1" cellPadding="1"
    width="672" border="0">
    <TR>
    <TD align="center"><asp:validationsummary id="ValidationSummary1" runat="server" Height="40px" Width="496px"></asp:validationsummary></TD>
    </TR>
    <TR>
    <TD><asp:datagrid id="dgEditInfo" runat="server" Height="20px" Width="672px" AutoGenerateColumns="False"
    PageSize="5" AllowPaging="True">
    <Columns>
    <asp:TemplateColumn HeaderText="LastName">
    <ItemTemplate>
    <asp:TextBox id=LastName runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.LastName") %>'>
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="ReportsTo">
    <ItemTemplate>
    <asp:TextBox id=Reports runat="server" Width="70px" Text='<%# DataBinder.Eval(Container, "DataItem.ReportsTo") %>'>
    </asp:TextBox>
    <asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" ControlToValidate="Reports" ErrorMessage="请输入数字"
    ValidationExpression="\d">!</asp:RegularExpressionValidator>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="FirstName">
    <ItemTemplate>
    <asp:TextBox id=FirstName runat="server" Width="164px" Text='<%# DataBinder.Eval(Container, "DataItem.FirstName") %>'>
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="City">
    <ItemTemplate>
    <asp:TextBox id=City runat="server" Width="156px" Text='<%# DataBinder.Eval(Container, "DataItem.City") %>'>
    </asp:TextBox>
    </ItemTemplate>
    <FooterStyle HorizontalAlign="Right"></FooterStyle>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="删除">
    <ItemTemplate>
    <asp:LinkButton id="DeleteRow" runat="server" CommandName="Delete">删除</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    <PagerStyle NextPageText="Next" PrevPageText="Previous" HorizontalAlign="Center" Mode="NumericPages"></PagerStyle>
    </asp:datagrid></TD>
    </TR>
    <TR>
    <TD align="right"><asp:linkbutton id="AddRow" runat="server">增加</asp:linkbutton><asp:textbox id="RowCount" runat="server" Width="30px">1</asp:textbox>行</TD>
    </TR>
    <TR>
    <TD><FONT face="宋体"><asp:button id="btnSave" runat="server" Width="48px" Text="保存"></asp:button></FONT></TD>
    </TR>
    <TR>
    <TD><FONT face="宋体"><asp:datagrid id="dgSaveInfo" runat="server"></asp:datagrid></FONT></TD>
    </TR>
    </TABLE>
    </form>
    </body>
    </HTML>
      

  2.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using System.Configuration;
    namespace CommonFunction
    {
    /// <summary>
    /// DataGridMulUse 的摘要说明。
    /// </summary>
    public class DataGridMulUse : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.TextBox RowCount;
    protected System.Web.UI.WebControls.LinkButton AddRow;
    protected System.Web.UI.WebControls.DataGrid dgEditInfo;
    protected System.Web.UI.WebControls.DataGrid dgSaveInfo;
    protected System.Web.UI.WebControls.ValidationSummary ValidationSummary1;
    protected System.Web.UI.WebControls.Button btnSave;

    private DataSet dataSet = new DataSet();
    private int lastEditedPage;
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    //进行数据绑定
    DataGridDataBind();
    }
    }

    public void ReverseBind()
    {
    //循环取得DataGrid控件中的项,并把每项的数据保存到DataSet中
    foreach(DataGridItem gridrow in dgEditInfo.Items)
    {
    //建立DataSet中testTable表的新行
    DataRow row = dataSet.Tables["testTable"].NewRow();
    //针对绑定数据源的数据项索引建立数据行的索引
    row = dataSet.Tables["testTable"].Rows[gridrow.DataSetIndex];
    //取得当前行文本框中的数据值,添加到DataSet中testTable表
    row["LastName"] = ((TextBox)(gridrow.FindControl("LastName"))).Text;
    row["FirstName"] = ((TextBox)(gridrow.FindControl("FirstName"))).Text;
    row["City"] = ((TextBox)(gridrow.FindControl("City"))).Text;
    row["ReportsTo"] = Convert.ToInt32(((TextBox)(gridrow.FindControl("Reports"))).Text);
    }
    }

    protected override void LoadViewState(object savedState)
    {
    base.LoadViewState(savedState); //取得编辑前的DataSet的视图状态
    if (ViewState["Data"]!= null) 
    {
    dataSet = (DataSet)ViewState["Data"];
    } if (ViewState["LastEditedPage"] != null)
    {
    //取得视图状态中保存的当前页的索引
    lastEditedPage = Convert.ToInt32(ViewState["LastEditedPage"]);
    } } protected override object SaveViewState()
    {
    //保存当前DataSet的视图状态
    ViewState["Data"] = dataSet;
    //保存当前页面索引的视图状态
    ViewState["LastEditedPage"] = lastEditedPage;
    return (base.SaveViewState());
    }
    //进行数据绑定
    private void DataGridDataBind()
    {
    //定义数据连接对象,其中数据库连接字符串是在Web.Config文件中定义的
    SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionSqlServer"].ToString());
    //创建数据适配器对象
    SqlDataAdapter da = new SqlDataAdapter("select top 3 LastName,FirstName,ReportsTo,City from Employees",conn);
    try
    {
    //填充数据集
    da.Fill(dataSet,"testTable");
    //进行数据绑定
    dgEditInfo.DataSource = dataSet.Tables["testTable"];
    dgEditInfo.DataBind();
    }
    catch(Exception error)
    {
    Response.Write(error.ToString());
    }
    }
    public void BindGrid()
    {
    //进行数据绑定
    dgEditInfo.DataSource = dataSet.Tables["testTable"];
    dgEditInfo.DataBind();
    lastEditedPage = dgEditInfo.CurrentPageIndex;
    }
    #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.dgEditInfo.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgEditInfo_ItemCommand);
    this.dgEditInfo.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dgEditInfo_PageIndexChanged);
    this.AddRow.Click += new System.EventHandler(this.AddRow_Click);
    this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void AddRow_Click(object sender, System.EventArgs e)
    {
    //如果输入了添加的行数
    if (RowCount.Text.Trim() != "")
    {
    try
    {
    int addRowCount = Convert.ToInt32(RowCount.Text);
    for(int i = 0;i<addRowCount;i++)
    {
    //为当前绑定的数据表添加新行
    DataRow row = dataSet.Tables["testTable"].NewRow();
    row[0] = "";
    row[1] = "";
    row[2] = "0";
    row[3] = "";
    dataSet.Tables["testTable"].Rows.Add(row);
    }
    }
    catch
    {
    Response.Write("请输入正确的要添加的行数");
    }

    }
    //重新进行数据绑定
    BindGrid();
    } private void btnSave_Click(object sender, System.EventArgs e)
    {
    //取得当前DataGrid中的数据
    ReverseBind();
    dgSaveInfo.DataSource = dataSet.Tables["testTable"];
    dgSaveInfo.DataBind();
    } private void dgEditInfo_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if("Delete" == e.CommandName)
    {
    //移除当前绑定的数据表中的指定行
    dataSet.Tables["testTable"].Rows.Remove(dataSet.Tables["testTable"].Rows[e.Item.DataSetIndex]);
    //防止最后页删除唯一的一条记录时出现异常信息
    if ((dgEditInfo.PageCount - dgEditInfo.CurrentPageIndex) == 1 && dgEditInfo.Items.Count == 1)
    {
    if (dgEditInfo.PageCount > 1)
    {
    lastEditedPage = lastEditedPage - 1;
    }
    else
    {
    lastEditedPage = 0;
    }
    }
    dgEditInfo.CurrentPageIndex = lastEditedPage;
    BindGrid();
    }
    } private void dgEditInfo_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    //设置DataGrid当前页的索引
    dgEditInfo.CurrentPageIndex = e.NewPageIndex;
    BindGrid();
    }
    }
    }
      

  3.   

    输入内容不丢失,你可以用js,button用客户端的,在客户端,datagrid就是一个table
    先获得datagrid的ClientId,然后根据table的insertRow,Tr的insertCell,再就是innerHTML来动态增加,具体参考DHTML手册。
      

  4.   

    <%@ Page language="c#" Codebehind="WebForm7.aspx.cs" AutoEventWireup="false" Inherits="bsTest2005_8_16.WebForm7" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm7</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <FONT face="宋体">
    <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="300" border="0">
    <TR>
    <TD>
    <asp:Button id="Button1" runat="server" Text="Button"></asp:Button></TD>
    </TR>
    <TR>
    <TD>
    <asp:DataGrid id="DataGrid1" runat="server">
    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:TextBox id="TextBox1" text='<%#DataBinder.Eval(Container.DataItem, "field1")%>' runat="server">
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid></TD>
    </TR>
    </TABLE>
    </FONT>
    </form>
    </body>
    </HTML>
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace bsTest2005_8_16
    {
        /// <summary>
        /// WebForm7 的摘要说明。
        /// </summary>
        public class WebForm7 : System.Web.UI.Page
        {
            protected System.Web.UI.WebControls.Button Button1;
            protected System.Web.UI.WebControls.DataGrid DataGrid1;
        
            private void Page_Load(object sender, System.EventArgs e)
            {
                // 在此处放置用户代码以初始化页面
                if(!Page.IsPostBack)
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("Field1");
                    dt.Columns.Add("Field2");
                    dt.Rows.Add(new object[]{null,null});
                    dt.Rows.Add(new object[]{null,null});
                    dt.Rows.Add(new object[]{null,null});
                    ViewState["myDataTable"] = dt;                BindData();
                }
            }        private void BindData()
            {
                if( ViewState["myDataTable"]!=null)
                {
                    DataTable dt =  ViewState["myDataTable"] as DataTable;
                    this.DataGrid1.DataSource = dt;
                    this.DataGrid1.DataBind();
                }
            }        private void getInput()
            {
                DataTable dt =  ViewState["myDataTable"] as DataTable;
                for(int i=0;i<this.DataGrid1.Items.Count;i++)
                {
                    TextBox tb = this.DataGrid1.Items[i].Cells[0].FindControl("TextBox1") as TextBox;
                    dt.Rows[i]["field1"] = tb.Text;
                }
                dt.Rows.Add(new object[]{null,null});
                dt.AcceptChanges();
                ViewState["myDataTable"] = dt;
            }        private void Button1_Click(object sender, System.EventArgs e)
            {
                getInput();
                BindData();
            }        #region Web 窗体设计器生成的代码
            override protected void OnInit(EventArgs e)
            {
                //
                // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
                //
                InitializeComponent();
                base.OnInit(e);
            }

            /// <summary>
            /// 设计器支持所需的方法 - 不要使用代码编辑器修改
            /// 此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {    
                this.Button1.Click += new System.EventHandler(this.Button1_Click);
                this.Load += new System.EventHandler(this.Page_Load);        }
            #endregion    }
    }