0

我可以通过以下代码在 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();
    }
}
4

1 回答 1

1

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

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

于 2013-09-24T13:08:30.163 回答