2015-12-28 7 views
1

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

и я использую Telerik вид на сетке

здесь, мой код в 3-х слоях

первых один

private void btnSbmt_Click(object sender, EventArgs e) 
    { 
     foreach (var row in radGridView1.Rows) 
     { 
      _MyName.Add((string)row.Cells[1].Value); 
     } 

     foreach (var row in radGridView1.Rows) 
     { // 0 - first column 
      _MyAmount.Add((int)row.Cells[2].Value); 
     } 

     foreach (var row in radGridView1.Rows) 
     { 
      _MyPrice.Add((decimal)row.Cells[3].Value); 
     } 

     Ref_View_Model = new View_model._View_Model(); 
     Ref_View_Model.GetInsertProduct(_myName, _myAmount, _myPrice, txtDt.Text); 
     radGridView1.CurrentRow.Delete(); 
     productTableAdapter.Update(sales_and_Inventory_SystemDataSet); 
     productTableAdapter.Fill(sales_and_Inventory_SystemDataSet.Product); 
     MessageBox.Show("Product(s) were added", "Done", MessageBoxButtons.OK);} 

второго

 public void GetInsertProduct(List<string> _name, List<int> _amount, List<decimal> _price, string _date) 
    { 
     Ref_Model = new Model._Model(); 
     Ref_Model.InsertProduct(_name, _amount, _price, _date); 
    } 

и третий один

 public void InsertProduct(List<string> _myName, 
         List<int> _myAmount, 
         List<decimal> _myPrice, string _date) 

{ Connection_String = MyConnection строка

Query = @"INSERT INTO dbo.product(Name, Amount, Price, [date]) 
          VALUES(@Name, @Amount, @Price, @Date);"; 

using (Con = new SqlConnection(Connection_String)) 
using (Cmd = new SqlCommand(Query, Con)) 
{ 

    Cmd.Parameters.Add("@Name", SqlDbType.NVarChar); 
    Cmd.Parameters.Add("@Amount", SqlDbType.Int); 
    Cmd.Parameters.Add("@Price", SqlDbType.Decimal); 
    // Cmd.Parameters.Add("@Date", SqlDbType.NVarChar); 
    Cmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = Convert.ToDateTime(_date); 

    Cmd.Connection = Con; 
    Con.Open(); 

    int recordsToAdd = _myName.Count(); 
    for(int x = 0; x < recordsToAdd; x++) 
    { 
     Cmd.Parameters["@Name"].Value = _myName[x]; 
     Cmd.Parameters["@Amount"].Value = _myAmount[x]; 
     Cmd.Parameters["@Price"].Value = _myPrice[x]; 
     Cmd.Parameters["@Date"].Value = _date; 
     Cmd.ExecuteNonQuery(); 
    } 
} 

}

ответ

0

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

Конечно, вы можете использовать только один цикл для перезагрузки глобальных переменных с фактическими значениями присутствующих в сетке

private void btnSbmt_Click(object sender, EventArgs e) 
{ 
    // This removes whatever is in the lists 
    _MyName.Clear(); 
    _MyAmount.Clear(); 
    _MyPrice.Clear();  

    // and now start adding items from scratch 
    foreach (var row in radGridView1.Rows) 
    { 
     _MyName.Add((string)row.Cells[1].Value); 
     _MyAmount.Add((int)row.Cells[2].Value); 
     _MyPrice.Add((decimal)row.Cells[3].Value); 
    } 
    .... 
Смежные вопросы