用c#从数据库中删除datagrid中选定的行

本文关键字:datagrid 删除 数据库 | 更新日期: 2023-09-27 17:50:00

如何从数据表中删除网格中选择的特定行。我试过用这个代码。

 string s1 = null;

      int i = datagridInfoOrg.CurrentCell.RowIndex;
            datagridInfoOrg.Rows.RemoveAt(i);
            datagridInfoOrg.Refresh();

        string s = "Select * from Add_Information";
        SqlCommand cmd1 = new SqlCommand(s, con);
        SqlDataReader dr = cmd1.ExecuteReader();
        if (dr.Read())
        {
            s1 = dr[i].ToString();

        }
        cmd1.Dispose();
        dr.Dispose();
        string Query = "delete from Add_Information WHERE CompanyName='"+s1+"'";
        SqlCommand cmd = new SqlCommand(Query, con);

        //conDatabase.Open();
        if (cmd.ExecuteNonQuery() >= 1)
        {
            MessageBox.Show("Succesfully Updated !!");
        }
        else
        {
            MessageBox.Show("No row selected");
        }

只删除第一行,而不删除选中的行。有人能帮我一下吗?

用c#从数据库中删除datagrid中选定的行

您的行s1 = dr[i].ToString();将始终为您提供第一行的第i列,因为您只执行了第一个dr.Read()

看来你的逻辑是错的。

SqlDataReader.Read()方法逐行读取读取器。这意味着当您在if语句中编写dr[i].ToString()时(不像while语句),此代码只工作一次,并读取第一行的第i个数字单元格。这就是为什么删除第一行是很正常的。

但是由于我们不知道代码中i的值是多少,所以不可能假设更多

我将采用一种稍微不同的方法从选中的行获取单元格数据,如下所示。这里的想法不是通过索引来获取单元格值并在删除查询中使用该值,因此来自单元格的值将用于获取DataTable中的行,或者直接到数据库中的表中并删除与DataGridView中找到的公司名称匹配的一行或多行。

/// <summary>
/// In the case there is a column in the DataGridView
/// named CompanyNameColumn
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmdRemoveDataGridViewRow_Click(object sender, EventArgs e)
{
    // make sure we have a row to work with
    if (!datagridInfoOrg.CurrentRow.IsNewRow)
    {
        // use this value for your query
        string KeyValue = datagridInfoOrg
            .CurrentRow
            .Cells["CompanyNameColumn"]
            .Value
            .ToString();
        if (!string.IsNullOrWhiteSpace(KeyValue))
        {
            // row index for current row
            // int rowIndex = datagridInfoOrg.CurrentCell.RowIndex;
            // do your delete and would suggest using a parameterized
            // query especially if there is a chance of embedded apostrophe
            // in the cell value
            datagridInfoOrg.Rows.Remove(datagridInfoOrg.CurrentRow);
        }
        else
        {
            // recovery code in the event the value in the cell
            // was not valid.
        }
    }
}