2013-09-24 43 views
0

我能夠通過下面的代碼在GridView中動態地添加一行,但是我需要做同樣的事情,每當我打開帶有先前在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(); 
    } 
} 

回答

1

由於您的問題和你談話的應用程序打開時左右,你需要做的是有一個方法來保存數據網格視圖的地方,即數據庫,文本文件等

這是因爲當應用程序關閉時應用程序變量丟失,所以要重新打開最後一點,您將需要讀取您保存在數據庫或文本文件中的數據,並重新從中創建DataTable對象。

+0

沒有將它存儲在數據庫或文本文件中是不可能的?我可以使用應用程序變量,我已經在這裏使用..或使用任何其他類似的概念.. – dnezmp03

+0

應用程序關閉後(即關閉瀏覽器窗口),應用程序變量丟失,因此它不再存在。如果您希望數據在關閉並重新打開瀏覽器後保留,外部存儲(即文本文件/數據庫)是實現此目的的唯一方法。如果這是網格視圖建議的網絡應用程序(或網站),我建議將數據庫作爲最簡單的選項。 – Nunners

+0

您能否提供一些示例將數據庫中的值存儲在單獨的表中,以便能夠檢索我在最後一點使用的值。因爲我感到震驚,並且我不知道如何使用此值轉發.. – dnezmp03