Как я могу удалить данные из datagridview c #? - PullRequest
0 голосов
/ 28 апреля 2018

Когда я использую приведенный ниже код, он действительно удаляет строку из таблицы данных, но когда я обновляю страницу, это не так.

    private void DeleteData_Click(object sender, EventArgs e)
    {

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.Selected)
            {
                dataGridView1.Rows.RemoveAt(row.Index);
                break; 
        }
        using (SqlConnection sqcon = new SqlConnection(@"MY CONNECTION STRING")) 
        {
            SqlCommand Scmd = new SqlCommand();

            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                DataGridViewRow delrow = dataGridView1.Rows[i];
                if (delrow.Selected == true)
                {
                    dataGridView1.Rows.RemoveAt(i);
                    try
                    {
                        Scmd.CommandText = "DELETE FROM Technican WHERE ID=" + (i++) + "";
                        sqcon.Open(); //ADDED
                        int count = Scmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }
        }

    }

Что я должен использовать для удаления строки как из локальной базы данных, так и из datagridview?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Я думаю, что соединение не будет назначено объекту команды.

SqlCommand Scmd = new SqlCommand();
Scmd.Connection = sqcon;

также я предпочел использовать DataGridView.SelectedRows вместо зацикливания всех записей в сетке.

полный код

    private void DeleteData_Click(object sender, EventArgs e)
    {
        var rowsToDelete = dataGridView1.SelectedRows;
        using (SqlConnection sqcon = new SqlConnection(@"MY CONNECTION STRING"))
        {
            SqlCommand Scmd = new SqlCommand();
            Scmd.Connection = sqcon;
            sqcon.Open(); //ADDED   
            foreach (DataGridViewRow row in rowsToDelete)
            {
                try
                {
                    Scmd.CommandText = "DELETE FROM Technican WHERE ID=" + row.Cells["Id"].Value.ToString() + "";
                    int count = Scmd.ExecuteNonQuery();

                    dataGridView1.Rows.Remove(row);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }

            }
            sqcon.Close();
        }
    }
0 голосов
/ 28 апреля 2018

Попробуй это, Удалите из базы данных, используя уникальный столбец или столбец идентификатора.

//Make datagridview cell[0] the unique column in your table.
try
{
    Scmd.CommandText = "DELETE FROM Technican WHERE ID='" + datagridview.rows[i].cell[0].value + "'";
    sqcon.Open(); //ADDED
    int count = Scmd.ExecuteNonQuery();
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}
...