如何在gridview中动态添加行?

时间:2013-09-24 13:00:39

标签: c# asp.net gridview

我可以通过以下代码在GridView中动态添加一行,但每当我使用之前在GridView中添加的记录打开应用程序时,我需要执行相同的操作以捕获并显示在Application中。 有任何想法吗??

编码:

    ![enter image description here][1] protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            SetInitialRow();
        }
    }

    private void SetInitialRow()
    {
        DataTable dt = new DataTable();
        DataRow dr = null;
       dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
        dt.Columns.Add(new DataColumn("Column1", typeof(string)));
        dt.Columns.Add(new DataColumn("Column2", typeof(string)));
        dt.Columns.Add(new DataColumn("Column3", typeof(string)));
        dr = dt.NewRow();
       dr["RowNumber"] = 1;
        dr["Column1"] = string.Empty;
        dr["Column2"] = string.Empty;
        dr["Column3"] = string.Empty;
        dt.Rows.Add(dr);
        dr = dt.NewRow();

        //Store the DataTable in ViewState
    // ViewState["CurrentTable"] = dt;
        Application["CurrentTable"]=dt;
        Gridview1.DataSource = dt;
        Gridview1.DataBind();
    }
    private void AddNewRowToGrid()
    {
        int rowIndex = 0;

       //if (ViewState["CurrentTable"] != null)
        if (Application["CurrentTable"] != null)
        {
            //DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
            DataTable dtCurrentTable1 = (DataTable)Application["CurrentTable"];
            DataRow drCurrentRow = null;
            if (dtCurrentTable1.Rows.Count > 0)
            {
                for (int i = 1; i <= dtCurrentTable1.Rows.Count; i++)
                {
                    //extract the TextBox values
                    TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
                    TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
                    TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

                    drCurrentRow = dtCurrentTable1.NewRow();
                   drCurrentRow["RowNumber"] = i + 1;

                    /*dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text;
                    dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text;
                    dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text;*/
                    dtCurrentTable1.Rows[i - 1]["Column1"] = box1.Text;
                    dtCurrentTable1.Rows[i - 1]["Column2"] = box2.Text;
                    dtCurrentTable1.Rows[i - 1]["Column3"] = box3.Text;

                    rowIndex++;
                }
                dtCurrentTable1.Rows.Add(drCurrentRow);
             //ViewState["CurrentTable"] = dtCurrentTable;
                Application["CurrentTable"] = dtCurrentTable1;
                Gridview1.DataSource = dtCurrentTable1;
                Gridview1.DataBind();
            }
        }
        else
        {
            Response.Write("ViewState is null");
        }

        //Set Previous Data on Postbacks
        SetPreviousData();
    }
    private void SetPreviousData()
    {
        int rowIndex = 0;
        //if (ViewState["CurrentTable"] != null)
        if (Application["CurrentTable"] != null)
        {
            //DataTable dt = (DataTable)ViewState["CurrentTable"];
            DataTable dt1 = (DataTable)Application["CurrentTable"];
            if (dt1.Rows.Count > 0)
            {
                for (int i = 0; i < dt1.Rows.Count; i++)
                {
                    TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
                    TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
                    TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

                    /*box1.Text = dt.Rows[i]["Column1"].ToString();
                    box2.Text = dt.Rows[i]["Column2"].ToString();
                    box3.Text = dt.Rows[i]["Column3"].ToString();*/
                    box1.Text = dt1.Rows[i]["Column1"].ToString();
                    box2.Text = dt1.Rows[i]["Column2"].ToString();
                    box3.Text = dt1.Rows[i]["Column3"].ToString();
                    rowIndex++;
                }
            }
        }
    }

    protected void ButtonAdd_Click(object sender, EventArgs e)
    {
        AddNewRowToGrid();
    }
}

1 个答案:

答案 0 :(得分:1)

因为在您的问题中,您正在讨论何时打开应用程序,您需要做的是在某个地方将数据保存在网格视图中,即数据库,文本文件等。

这是因为应用程序关闭后应用程序变量会丢失,因此要在最后一点重新打开,您需要读取您在数据库或文本文件中保存的数据并重新创建DataTable对象从那起。