如何在 GridView 中动态添加行

本文关键字:动态 添加行 GridView | 更新日期: 2023-09-27 18:32:40

我能够通过以下代码在 GridView 中动态添加一行,但每次使用之前在 GridView 中添加的记录打开应用程序时,我都需要执行相同的操作才能在应用程序中捕获和显示。有什么想法吗??

编码:

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

如何在 GridView 中动态添加行

由于您在问题中谈论的是何时打开应用程序,因此您需要做的是有一种将数据保存在网格视图中某处的方法,即数据库、文本文件等。

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