2015-11-09 1 views
1

Я пытаюсь добавить новую строку в мой DataTable, а затем привязать ее к GridView (Inquiries) каждый раз, когда я нажимаю кнопку. Строка добавляется, когда я нажимаю кнопку в первый раз. но когда я пытаюсь добавить еще одну строку, щелкнув ее снова, она заменит существующую строку.Как добавить новую строку в DataTable под существующими строками

protected void addInquiry_Click(object sender, EventArgs e) 
{ 
     try 
     { 
      Quantity = QuantityTxt.Text; 
      string Details = Request.Form[Products.UniqueID]; 
      SelectedProduct = Details.Split('!'); 
      ProductNo = SelectedProduct[0]; 
      ProductDescription = SelectedProduct[1]; 
      ProductSapPack = SelectedProduct[2]; 
      ProductID = SelectedProduct[3]; 
      DataTable dt = new DataTable();      
      dt.Columns.AddRange(new DataColumn[5] { 
           new DataColumn("ProductID",typeof(int)), 
           new DataColumn("ProductNo", typeof(string)), 
           new DataColumn("Description", typeof(string)), 
           new DataColumn("SapPack",typeof(string)), 
           new DataColumn("Quantity",typeof(string)), 
           }); 

      DataRow dr = dt.NewRow(); 

      dr[0] = ProductID; 
      dr[1] = ProductNo; 
      dr[2] = ProductDescription; 
      dr[3] = ProductSapPack; 
      dr[4] = Quantity; 

      dt.Rows.Add(dr); 
      Inquiries.DataSource = dt; 
      Inquiries.DataBind(); 
     } 

     finally 
     { 
      QuantityTxt.Text = String.Empty; 
      Description.Text = String.Empty; 
      SapPack.Text = String.Empty; 
      Products.Text = String.Empty; 
     } 
} 
+2

Каждый раз, когда вы нажимаете на кнопку, вы создаете новый 'DataTable'. Так что на самом деле это не обновление старой строки, а создание нового каждый раз. –

+0

Так что я должен создать экземпляр DataTable вне события Click? –

+0

@RahulSingh Я создаю экземпляр DataTable вне события click, но он по-прежнему заменяет мою оригинальную строку! –

ответ

0

Ответ, который работал для меня был этот

protected void addInquiry_Click(object sender, EventArgs e) 
{ 
    DataTable dt=(DataTable)Session["Inquiry"]; 
    try 
    { 
     Quantity = QuantityTxt.Text; 
     string Details = Request.Form[Products.UniqueID]; 
     SelectedProduct = Details.Split('!'); 
     ProductNo = SelectedProduct[0]; 
     ProductDescription = SelectedProduct[1]; 
     ProductSapPack = SelectedProduct[2]; 
     ProductID = SelectedProduct[3]; 
     if(dt==null) 
     { 
      dt= new DataTable(); 
      dt.Columns.AddRange(new DataColumn[5] { 
          new DataColumn("ProductID",typeof(int)), 
          new DataColumn("ProductNo", typeof(string)), 
          new DataColumn("Description", typeof(string)), 
          new DataColumn("SapPack",typeof(string)), 
          new DataColumn("Quantity",typeof(string)), 
          }); 

     }    


     DataRow dr = dt.NewRow(); 

     dr[0] = ProductID; 
     dr[1] = ProductNo; 
     dr[2] = ProductDescription; 
     dr[3] = ProductSapPack; 
     dr[4] = Quantity; 

     dt.Rows.Add(dr); 
     Inquiries.DataSource = dt; 
     Inquiries.DataBind(); 
     Session.Add("Inquiry",dt); 
    } 
    finally 
    { 
     QuantityTxt.Text = String.Empty; 
     Description.Text = String.Empty; 
     SapPack.Text = String.Empty; 
     Products.Text = String.Empty; 
    } 
} 
2

Измените код следующим путем добавления созданного DataTable в состоянии сеанса, а затем попытаться получить его всякий раз, когда пользователь нажимает на кнопку.

protected void addInquiry_Click(object sender, EventArgs e) 
{ 
    DataTable dt=(DataTable)Session["Inquiry"]; 
    try 
    { 
     Quantity = QuantityTxt.Text; 
     string Details = Request.Form[Products.UniqueID]; 
     SelectedProduct = Details.Split('!'); 
     ProductNo = SelectedProduct[0]; 
     ProductDescription = SelectedProduct[1]; 
     ProductSapPack = SelectedProduct[2]; 
     ProductID = SelectedProduct[3]; 
     if(dt==null) 
     { 
      dt= new DataTable();      
     }    
     dt.Columns.AddRange(new DataColumn[5] { 
          new DataColumn("ProductID",typeof(int)), 
          new DataColumn("ProductNo", typeof(string)), 
          new DataColumn("Description", typeof(string)), 
          new DataColumn("SapPack",typeof(string)), 
          new DataColumn("Quantity",typeof(string)), 
          }); 

     DataRow dr = dt.NewRow(); 

     dr[0] = ProductID; 
     dr[1] = ProductNo; 
     dr[2] = ProductDescription; 
     dr[3] = ProductSapPack; 
     dr[4] = Quantity; 

     dt.Rows.Add(dr); 
     Inquiries.DataSource = dt; 
     Inquiries.DataBind(); 
     Session.Add("Inquiry",dt); 
    } 
    finally 
    { 
     QuantityTxt.Text = String.Empty; 
     Description.Text = String.Empty; 
     SapPack.Text = String.Empty; 
     Products.Text = String.Empty; 
    } 
} 
+0

Он работал, когда я сделал это if (dt == null) { dt = new DataTable(); dt.Columns.AddRange (новый DataColumn [5] { новый DataColumn («ProductID», typeof (int)), новый DataColumn («ProductNo», typeof (string)), новый DataColumn («Описание», typeof (строка)), новый DataColumn («SapPack», typeof (строка)), новый DataColumn («Количество», typeof (строка)), }); } –

1

Поскольку вы не сохраняете данные в базе данных, вам необходимо создать Session/ViewState для сохранения DataTable.

if(Session["Products"] != null) 
dt = (DataTable) Session["Products"]; 
else 
dt = new DataTable(); // For the first time creates a new DataTable otherwise reads from Session variable 

---- 
At the end, save the data to the Session variable: 
Session["Products"] = dt; 
Смежные вопросы