从数据库中删除选定的datagrid行?

时间:2016-03-23 10:49:09

标签: c# datagrid

我的表单中有一个DataGrid和一个删除按钮。当我单击删除按钮时,它应该从我的Access数据库中删除所选的datagrid行。但它只是从数据网格而不是数据库中删除。当我再次加载表单时,删除的行仍然存在。这是我删除按钮的代码:

con.Open();
OleDbCommand comnd = new OleDbCommand();
comnd.Connection = con;
string q = "delete  from customers";
comnd.CommandText = q;
comnd.ExecuteNonQuery();
MessageBox.Show("delete");

4 个答案:

答案 0 :(得分:1)

因此,您尝试使用以下查询从数据库中删除单行:

delete from customers

问题是此查询未指定应受其影响的行。您必须了解此处的DataGrid与您的DataBase不同。

为了从数据库中删除特定行,您还应该指定它是哪一行。例如,您可以告诉它删除具有特定ID的行:

delete from customers where id = 7

上述查询将删除ID为7的所有行。但这只是一种可能的方法。

为此,您实际上需要在表格中id。以下代码来自MSDN源。它删除具有来自datagrid的特定id的条目:

int ID = (int) datagrid.DataKeys[(int) e.Item.ItemIndex];

string sql = "DELETE FROM PetTable WHERE ID=" + ID;
ExecuteNonQuery(sql);

有关详细信息,请read this

答案 1 :(得分:1)

你需要遍历选定的行,删除所有类似下面的内容

 foreach (DataGridViewRow row in datagrid1.SelectedRows)
        {
            //get key
            int rowId = Convert.ToInt32(row.Cells[indexWhereIdStored].Value);
            // your delete logic
        }

如果您需要删除一个选定的行,假设第一列是键

if (datagrid1.SelectedRows.Count > 0)
{
     int selectedIndex = datagrid1.SelectedRows[0].Index;

     // gets the RowID from the first column in the grid
     int rowID = int.Parse(datagrid1[0, selectedIndex].Value.ToString());
     // you can create a parameter for the @RowID
     string sql = "DELETE FROM YourTable WHERE RowID = @RowID";

     // your code for deleting it from the database

     //  refreshing the DataGridView
}

答案 2 :(得分:0)

在您的SQL查询中,您错过了WHERE语句,以指示您要删除的客户的ID

答案 3 :(得分:0)

我们做到了。我在where子句中使用name而不是Id来处理数据类型异常。这是删除按钮的工作代码。                    `

               `con.Open();
                OleDbCommand comnd = new OleDbCommand();
                comnd.Connection = con;
                string q = "delete  from customers where CustomerName='" 
                 + txtName.Text + "'";
                comnd.CommandText = q;
                comnd.ExecuteNonQuery();
                MessageBox.Show("delete");