2013-10-14 68 views
0

再次出现问题。我可以从DVG中删除行,但是当我关闭程序并重新运行时,行会再次出现。我在网上看了几个例子,并且真的很难让他的工作。从MS Access数据库的DataGridView删除选定的行

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data.OleDb; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class FormAccounts : Form 
    { 
     public FormAccounts() 
     { 
      InitializeComponent(); 
      this.accountsTableAdapter.Fill(this.accountsDataSet.Accounts); 
     }  

     private void BTNADD_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("Make sure you have checked the Date before Adding"); 

      OleDbConnection conn = new OleDbConnection(); 
      conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\kenny\Documents\Visual Studio 2010\Projects\Copy Cegees\Cegees\Cegees\Accounts.accdb"; 

      String TheDate = DTPAccounts.Value.ToShortDateString(); 
      String Moneyin = TextMoneyin.Text; 
      String Retailin = TextRetailin.Text; 
      String Rent = TextRent.Text; 
      String Stock = TextStock.Text; 
      String Misc = TextMisc.Text; 
      String Water = TextWater.Text; 
      String Fuel = TextFuel.Text; 
      String Phone = TextPhone.Text; 

      OleDbCommand cmd = new OleDbCommand("Insert Into Accounts ([TheDate], [Moneyin], [Retailin], [Rent], [Stock], [Misc], [Water], [Fuel], [Phone]) Values (@TheDate, @Moneyin, @Retailin, @Rent, @Stock, @Misc, @Water, @Fuel, @Phone)"); 
      cmd.Connection = conn; 
      conn.Open(); 

      if (conn.State == ConnectionState.Open) 
      { 
       cmd.Parameters.Add("@TheDate", OleDbType.VarChar).Value = TheDate; 
       cmd.Parameters.Add("@Moneyin", OleDbType.VarChar).Value = Moneyin; 
       cmd.Parameters.Add("@Retailin", OleDbType.VarChar).Value = Retailin; 
       cmd.Parameters.Add("@Rent", OleDbType.VarChar).Value = Rent; 
       cmd.Parameters.Add("@Stock", OleDbType.VarChar).Value = Stock; 
       cmd.Parameters.Add("@Misc", OleDbType.VarChar).Value = Misc; 
       cmd.Parameters.Add("@Water", OleDbType.VarChar).Value = Water; 
       cmd.Parameters.Add("@Fuel", OleDbType.VarChar).Value = Fuel; 
       cmd.Parameters.Add("@Phone", OleDbType.VarChar).Value = Phone; 

       try 
       { 
        cmd.ExecuteNonQuery(); 
        MessageBox.Show("Customer Added"); 
        conn.Close(); 
       } 
       catch (OleDbException ex) 
       { 
        MessageBox.Show(ex.Source); 
        MessageBox.Show(ex.ToString()); 
        conn.Close(); 
       } 
      } 
      } 

     private void BTNView_Click(object sender, EventArgs e) 
     { 
      DVGAccounts.Visible = !DVGAccounts.Visible; 

     } 


     private void BTNDelete_Click(object sender, EventArgs e) 
     { 
      { 
       DialogResult dr = MessageBox.Show("Are you sure you want to delete", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 

       if (dr == DialogResult.Yes) 
       { 
        if (this.DVGAccounts.SelectedRows.Count > 0) 
        { 
         DVGAccounts.Rows.RemoveAt(DVGAccounts.CurrentRow.Index); 
         this.accountsTableAdapter.Update(this.accountsDataSet.Accounts); 
         accountsDataSet.AcceptChanges(); 
         ; 
        } 
       } 


      } 
     } 
    } 
} 

回答

0

您只从DataGridView中删除行,这是一个内存中的构造。如果您希望它从数据库中删除行,则必须使DataGridView通过打开的连接被配置为连接到表,或者通过发出删除语句来做出反应以删除记录,方式与你正在做你的插入。我建议尽量让事情自动化一点,所以连接的DGV可能会有所帮助。

1

我设法使用这个代码在按钮上工作。

private void BTNDelete_Click(object sender, EventArgs e) 
{ 
    DialogResult dr = MessageBox.Show("Are you sure you want to delete", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 

    if (dr == DialogResult.Yes) 
    { 
     if (this.DVGAccounts.SelectedRows.Count >0 && this.DVGAccounts.SelectedRows[0].Index != this.DVGAccounts.Rows.Count -1) 
     { 
      this.DVGAccounts.Rows.RemoveAt(this.DVGAccounts.SelectedRows[0].Index); 
     } 
    } 
}