2013-09-15 3 views
0

Я уже могу добавить новые данные в базу данных и отобразить эту базу данных через datagridview, а я команду обновить datagridview всякий раз, когда я нажимаю кнопку «Добавить» (добавление новых данных в базу данных) , Но он дублирует старые данные с новым.Дублируйте старые данные при обновлении datagridview

Вот скриншот, который показывает его дубликат после добавления новых данных и обновления DataGridView: enter image description here

В изображении выше, есть дублирующие данные ID «16», каждый раз, когда я введите новое значение и вставьте его в базу данных он добавляет новое (текущее) значение в базу данных, но старое значение будет дублироваться. Поэтому мне нужно выйти из программы и снова запустить ее снова. Но есть ли другие способы решить эту проблему (старые данные не дублируются после добавления новых данных в базу данных и обновления datagridview)?

Вот мой код:

private void ViewDatabase(object sender, EventArgs e) 
     { 
      using (OleDbConnection conn = new OleDbConnection(connectionString)) 
      { 
       string query = "SELECT * FROM [Table]"; 

       conn.Open(); 

       using (OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn)) 
       { 
        adapter.Fill(ds, "Table"); 
        dataGridView1.DataSource = ds.Tables[0]; 
       } 

       conn.Close(); 
      } 
     } 


private void Add(object sender, EventArgs e) 
     { 
      using (OleDbConnection conn = new OleDbConnection(connectionString)) 
      { 
       string query = "INSERT INTO [Table] ([ProductCode], [Quantity], [Description], [Price]) VALUES (@ProductCode, @Quantity, @Description, @Price)"; 

       conn.Open(); 

       using (OleDbCommand cmd = new OleDbCommand(query, conn)) 
       { 
        cmd.Parameters.Add("@ProductCode", System.Data.OleDb.OleDbType.Integer); 
        cmd.Parameters["@ProductCode"].Value = this.numericTextBox1.Text; 

        cmd.Parameters.Add("@Quantity", System.Data.OleDb.OleDbType.Integer); 
        cmd.Parameters["@Quantity"].Value = this.numericUpDown1.Value; 

        cmd.Parameters.Add("@Description", System.Data.OleDb.OleDbType.VarChar); 
        cmd.Parameters["@Description"].Value = this.textBox3.Text; 

        cmd.Parameters.Add("@Price", System.Data.OleDb.OleDbType.Integer); 
        cmd.Parameters["@Price"].Value = this.textBox4.Text; 

        cmd.ExecuteNonQuery(); 

        if (choice.comboBox1.Text == "English") 
        { 
         System.Media.SoundPlayer sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Exclamation.wav"); 
         sound.Play(); 

         DialogResult dialogResult = MessageBox.Show("Added Successfully!", "Success", MessageBoxButtons.OK); 

         if (dialogResult == DialogResult.OK) 
         { 
          ViewDatabase(sender, e); 

          ClearTextBoxes(sender, e); 
         } 
        } 

ответ

0

Вставьте этот

dataGridView1.DataSource = null; 

Здесь

adapter.Fill(ds, "Table"); 
//here 
dataGridView1.DataSource = ds.Tables[0]; 

Edit:

Move

    dataGridView1.DataSource = ds.Tables[0]; 

вне блока, используя его вложен в

+0

хаи Ahsan sallem, я уже попробовал ваш код, добавив 'dataGridView.DataSource = NULL;.' 'В ниже adapter.Fill (DS, "Таблица")' , но он по-прежнему дублирует старые данные. – Kaoru

+0

попробуйте это adapter.Fill (ds, «Таблица»); dataGridView1.DataSource = null; dataGridView1.Refresh(); И переместить эту строку "dataGridView1.DataSource = ds.Tables [0];" За пределами используемого блока он вложен. –

+0

Нет, он все еще не может @Ahsan Saleem – Kaoru

Смежные вопросы