2016-09-14 11 views
0

ドロップダウンからデータテーブルにデータを追加し、gridviewに表示する。その後、行を削除してViewStateをメンテナンスしていますが、行を1つ削除して値を再度マッピングした後、重複したレコードを持つgridviewのテーブルの初期状態を取得します。データテーブルから行を削除し、更新されたグリッドビューを表示

DataTable dt = new DataTable(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     //dt = new DataTable("tblTest"); 
     //dt = ViewState["updatedtbl"] as DataTable; 
     DataColumn dc1 = new DataColumn(); 
     dc1.DataType = typeof(String); 
     dc1.ColumnName = "A"; 
     DataColumn dc2 = new DataColumn(); 
     dc2.DataType = typeof(String); 
     dc2.ColumnName = "B"; 
     dt.Columns.Add(dc1); 
     dt.Columns.Add(dc2); 
     //ViewState["dt"] = dt; 
    } 

    protected void Button2_Click(object sender, EventArgs e) 
    { 
     if (FileUpload1.HasFile) 
     { 
      if (Path.GetExtension(FileUpload1.FileName) == ".xlsx") 
      { 
       DataTable dt = new DataTable(); 
       ExcelPackage package = new ExcelPackage(FileUpload1.FileContent); 
       dt = package.ToDataTable(); 

       DropDownList1.Items.Clear(); 

       for (int i = 0; i < dt.Columns.Count; i++) 
       { 
        DropDownList1.Items.Add(new ListItem(dt.Columns[i].ColumnName)); 
       } 
      } 
     } 
    } 

    protected void Button3_Click(object sender, EventArgs e) 
    { 

     Session["A"] += DropDownList1.SelectedItem.Value + "|"; 
     Session["B"] += DropDownList2.SelectedItem.Value + "|"; 
     CreateTable(); 
    } 

    public void CreateTable() 
    { 
     string[] sa = Session["A"].ToString().Split('|'); 
     string[] sb = Session["B"].ToString().Split('|'); 
     int recordnum = sa.Length; 
     for (int j = 0; j < recordnum - 1; j++) 
     { 

      DataRow dr = dt.NewRow(); 
      dr["A"] = sa[j].ToString(); 
      dr["B"] = sb[j].ToString(); 
      dt.Rows.Add(dr); 
     } 
     ViewState["tbl"] = dt; 
     BindGrid(); 
    } 

    protected void BindGrid() 
    { 
     GridView2.DataSource = dt; 
     GridView2.DataBind(); 
    } 

    protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 
     DataTable dx = ViewState["tbl"] as DataTable; 
     //DataTable dx = dt; 
     if (dx.Rows.Count > 0) 
     { 
      dx.Rows[e.RowIndex].Delete(); 
      dx.AcceptChanges(); 

      GridView2.DataSource = dx; 
      GridView2.DataBind(); 
      ViewState["updatedtbl"] = dx; 

     } 
     else  //To check which portion of code is being executed 
     { 
      Label1.Text = "Deleted"; 
      Label2.Text = dx.Rows.Count.ToString(); 
     } 
    } 
+0

削除イベントでは、名前が「updatedtbl」の異なるビューステートに更新されたデータテーブルを割り当てています。あなたは 'ViewState [" tbl "]' –

答えて

0

削除イベントであなたが名前updatedtblと異なるビューステートへの更新データテーブルを再割り当てされています

は、ここでは、コードです。 ViewState["tbl"]に割り当てる必要があります。

if(dx.Rows.Count > 0) 
     { 
      dx.Rows[e.RowIndex].Delete(); 
      dx.AcceptChanges(); 

      GridView2.DataSource = dx; 
      GridView2.DataBind(); 
      //ViewState["updatedtbl"] = dx; <<---- pay attention here 
      ViewState["tbl"] = dx; <<---- pay attention here   
     } 
関連する問題